代码之家  ›  专栏  ›  技术社区  ›  Jay

与EntityDataSource的多个关系绑定

  •  0
  • Jay  · 技术社区  · 15 年前

    我的数据库有一个ADO.NET实体数据模型。在这个模型中,我有三个相关的表: 包含用户ID和其他详细信息的“用户”表。 包含runid、approverid和其他详细信息的“run”表 包含userid和runid列的“runtouser”

    关系如下: users.userid是要运行的一对一关系。approverid user.userid与runtouser.userid是多对多的 run.runid与runtouser.runid是多对多的。

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

    我有一个ASP.NET窗体视图,我想在其中编辑运行中的数据以及用户中的相关数据。

    数据绑定在大多数情况下都有效。但是,当我作为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 回复  |  直到 15 年前
        1
  •  3
  •   Jay    15 年前

    因为我找到了答案,忘了把问题解决了,所以我一直在跟进。

    我发现当您与同一个外部表有多个关联时,默认情况下它们会得到一个数字后缀。因此,run表有一个用户和一个用户1关联。当您为EDS使用“include”参数时,您需要知道要使用哪个关联,直到在EDS模型中查看该关联才明显。

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

    如果我想包括EDS的两个关联,我会做如下的事情:

    Include="Users,Approver"
    

    希望这对其他人有帮助,因为我一开始不太清楚。

        2
  •  0
  •   Shiraz Bhaiji    15 年前

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

    如果您像这样构建它,您的绑定就变得简单多了。