2009-07-01 43 views
0

我有一个ADO .Net实体数据模型用于我的数据库。在这个模型中,我有三个相关的表格: “用户”表包含UserId和其他细节。 “运行”表包含的runid,ApproverId和其他细节,其中包含用户ID “RunToUser”和列的runid与EntityDataSource的多重关系绑定

的关系如下: Users.UserId是一对一的关系,以Run.ApproverId 用户。 UserId是多对多RunToUser.UserId Run.RunId是多对多RunToUser.RunId

在实体模型中,这表示为具有两个单独关系的两个表。一对一关系以及用户和运行之间的多对多关系。

我有一个ASP.net Formview,我想要编辑Run中的数据以及用户中的相关数据。

数据绑定在大多数情况下都有效。但是,当我作为entitydatasource绑定到Users表时,它始终使用一对一关系关联。

如何强制entitydatasource使用特定关系关联,以便我可以将数据从一对一映射绑定到标签,将多对多绑定到数据视图?

我试过where子句中的“EXISTS”,它限制了记录,但它仍然坚持总是使用one-to-one,并且只在所有数据绑定控件中显示单个用户。下面是用户entitydatasource:

<asp:EntityDataSource ID="edsUsers_DET" runat="server" 
     ConnectionString="name=MyEntities" DefaultContainerName="MyEntities" 
     EntitySetName="Users" 
     Where="EXISTS(SELECT VALUE p FROM it.Run AS p WHERE p.RunID = @RunID)" > 
     <WhereParameters> 
      <asp:ControlParameter ControlID="fvRun" Name="RunID" Type="Int32" /> 
     </WhereParameters>   
    </asp:EntityDataSource> 

我想我会需要两个实体的数据来源之一的标签,为GridView第二,但直到我知道确定如何specifiy关联,我不知道该怎么进一步进行。 THX, -J

回答

3

只要跟进,因为我找到了答案,忘记了关闭问题。

我发现当你有多个关联与同一个外表时,他们默认获得一个数字后缀。所以,Run表有一个Users和一个Users1关联。当您使用EDS的“包含”参数时,您需要知道使用哪个关联,但在查看EDS模型之前,这并不明显。

我以为重命名了所有具有数字后缀的关联。我的运行表现在拥有用户和审批者(而不是用户1)关联。这让我很容易破译LINQ和EDS声明部分包含哪些关系。

如果我想包括协会的EDS我会做这样的事情:

Include="Users,Approver" 

希望这可以帮助其他人,因为这是我不太明显在第一。

0

如果你在你的数据库中的一比一的关系,你可以建立你的实体模型,使得这两个表显示为在实体模型中的一个表。

如果你这样构建,你的绑定变得更简单。

+0

我不确定我是否理解,你有没有例子? – Jay 2009-07-14 20:32:22