与观点的关系

时间:2011-03-07 09:27:58

标签: visual-studio-2008 sql-server-2005 entity-framework .net-3.5 dynamic-data

我有两张桌子:Master和Detail。两者都使用称为[Identity]的主键。细节也有一个名为[MasterID]的Master的引用。不幸的是,这两个表还有一些巨大的字段(TEXT,Binary,类似的东西),我不想在我的网站上看到。因此,为了提高性能,我创建了两个视图(ViewMaster和ViewDetail),它们都只选择了两个表的子集。
现在问题是:我使用动态数据站点来显示这些视图的内容。这样可行。但我希望它们相互链接,因此我可以过滤相关主记录中的详细记录。使用表格,这很简单:只需添加一个外键即可。但是观点没有外键!
那么,最简单的方式是什么让DDS自动添加这些视图之间的链接?或者是否有其他选项可以显示只有DDS的主 - 细节概览?


不,我不使用MVC。我知道它能做什么,但这些只是我需要使用的75个表中的两个。 DDS允许我快速生成所有表的概述,甚至允许在最重要的表上输入数据。

1 个答案:

答案 0 :(得分:1)

动态数据站点是从Entity框架模型构建的。您可以欺骗网站,使其认为这些视图之间存在关联,但这意味着您必须手动将该关系添加到EDMX。这很难,因为你必须:

  • 在EDMX设计器中创建关联。
  • 从EDMX中的相关实体删除FK属性
  • 以XML格式打开EDMX并手动将关系添加到SSDL part = create association set and association
  • 在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列,您的站点也不会查询它们。

执行上述任何更改后,您无法再从数据库更新模型,否则会删除更改。