与EntityDataSource的多个关系绑定

时间:2009-07-01 19:50:01

标签: .net asp.net entity-framework entity-relationship

我的数据库有一个ADO .Net实体数据模型。在这个模型中,我有三个相关的表: “用户”表包含UserId和其他详细信息。 “运行”包含RunId,ApproverId和其他详细信息的表 “RunToUser”包含UserId和RunId列

关系如下: Users.UserId是Run.ApproverId的一对一关系 使用RunToUser.UserId,User.UserId可以多对多 Run.RunId与RunToUser.RunId

有很多对

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

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

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

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

我在where子句中尝试了“EXISTS”,这限制了记录,但仍坚持始终使用一对一,只显示所有数据绑定控件中的单个用户。以下是用户的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,但直到我知道确定如何指定关联,我不知道如何继续进行。 谢谢, -J

2 个答案:

答案 0 :(得分:3)

刚跟进,因为我找到答案,忘了关闭这个问题。

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

我认为我重新命名了所有具有数字后缀的关联。 My Run表现在具有Users和Approver(而不是Users1)关联。这让我可以轻松破译哪些关系包含在LINQ和EDS声明部分中。

如果我想在EDS中包含两个关联,我会做类似的事情:

Include="Users,Approver"

希望这有助于其他人,因为起初对我来说不是很明显。

答案 1 :(得分:0)

如果数据库中存在一对一的关系,则可以构建实体模型,使这两个表在实体模型中显示为单个表。

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