我的数据库有一个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
答案 0 :(得分:3)
刚跟进,因为我找到答案,忘了关闭这个问题。
我发现当你与同一个外表有多个关联时,它们会默认获得一个数字后缀。因此,Run表有一个Users和一个Users1关联。当您使用EDS的“包含”参数时,您需要知道在查看EDS模型之前使用哪个关联是不明显的。
我认为我重新命名了所有具有数字后缀的关联。 My Run表现在具有Users和Approver(而不是Users1)关联。这让我可以轻松破译哪些关系包含在LINQ和EDS声明部分中。
如果我想在EDS中包含两个关联,我会做类似的事情:
Include="Users,Approver"
希望这有助于其他人,因为起初对我来说不是很明显。
答案 1 :(得分:0)
如果数据库中存在一对一的关系,则可以构建实体模型,使这两个表在实体模型中显示为单个表。
如果你像这样构建它,你的绑定会变得更加简单。