我有两张桌子:Master和Detail。两者都使用称为[Identity]的主键。细节也有一个名为[MasterID]的Master的引用。不幸的是,这两个表还有一些巨大的字段(TEXT,Binary,类似的东西),我不想在我的网站上看到。因此,为了提高性能,我创建了两个视图(ViewMaster和ViewDetail),它们都只选择了两个表的子集。
现在问题是:我使用动态数据站点来显示这些视图的内容。这样可行。但我希望它们相互链接,因此我可以过滤相关主记录中的详细记录。使用表格,这很简单:只需添加一个外键即可。但是观点没有外键!
那么,最简单的方式是什么让DDS自动添加这些视图之间的链接?或者是否有其他选项可以显示只有DDS的主 - 细节概览?
不,我不使用MVC。我知道它能做什么,但这些只是我需要使用的75个表中的两个。 DDS允许我快速生成所有表的概述,甚至允许在最重要的表上输入数据。
答案 0 :(得分:1)
动态数据站点是从Entity框架模型构建的。您可以欺骗网站,使其认为这些视图之间存在关联,但这意味着您必须手动将该关系添加到EDMX。这很难,因为你必须:
SSDL中的关联应如下所示:
<EntityContainer>
...
<AssociationSet Name="MyDummyFK" Association="....MyDummyFK">
<End Role="FirstView" EntitySet="FirstView" />
<End Role="SecondView" EntitySet="SecondView" />
</AssociationSet>
</EntityContainer>
<Association Name="MyDummyFK">
<End Role="FirstView" Type="....FirstView" Multiplicity="0..1" />
<End Role="SecondView" Type="....SecondView" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="FirstView">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="SecondView">
<PropertyRef Name="FirstViewId" />
</Dependent>
</ReferentialConstraint>
</Association>
另一种方法是在DB中创建具有该关系的临时表,让EF为您生成所有内容。然后,您将手动修改EDMX并重命名所有内容以指向您的视图而不是表格。之后,您可以删除表格。
但我认为你可以直接使用你的表格。只需修改EDMX(SSDL必须再次手动修改),因此它不包括那些TEXT和BINARY列,您的站点也不会查询它们。
执行上述任何更改后,您无法再从数据库更新模型,否则会删除更改。