0

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

关系如下: Users.UserId 与 Run.ApproverId 是一对一的关系 User.UserId 与 RunToUser.UserId 是多对多 Run.RunId 与 RunToUser.RunId 是多对多

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

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

数据绑定在大多数情况下都有效。但是,当我作为实体数据源绑定到用户表时,它总是使用一对一的关系关联。

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

我在限制记录的 where 子句中尝试了“EXISTS”,但它仍然坚持始终使用一对一并且仅在所有数据绑定控件中显示单个用户。这是用户的实体数据源:

  <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>

我假设我需要两个实体数据源,一个用于标签,另一个用于网格视图,但在我知道如何指定关联之前,我不知道如何进一步进行。谢谢,-J

4

2 回答 2

3

自从我找到答案并忘记关闭问题后,就进行了跟进。

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

I went thought an renamed all my associations that had the numeric suffixes. My Run table now has a Users and an Approver (instead of Users1) association. This lets me easily decipher which relations ship to include for both LINQ and the EDS declarative portions.

If I wanted to include both associations for the EDS I would do something like:

Include="Users,Approver"

Hope this helps someone else since it wasn't very obvious to me at first.

于 2009-08-14T20:29:02.243 回答
0

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

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

于 2009-07-06T19:33:31.777 回答