EF4中的AssociationSet

时间:2011-01-26 07:35:00

标签: .net c#-4.0

我是EF4的初学者,我无法理解.edmx文件中的内容,

有人可以向我解释一下AssociationSet的好处是什么,我认为Association元素代表了表之间关系的一切,所以我为什么要使用AssociationSet。

谢谢,

1 个答案:

答案 0 :(得分:1)

AssociationSet是关联的容器。

当我们有合同和地址类型时,让我们从一个simle案例开始。它的关系可以在xml中描述,如:

<Association Name="FK_Address_Contact">
  <End Role="Contact" Type="SampleModel.Contact" Multiplicity="1">
    <OnDelete Action="Cascade" />
  </End>
  <End Role="Address" Type="SampleModel.Address" Multiplicity="*" />
  <ReferentialConstraint>
    <Principal Role="Contact">
      <PropertyRef Name="ContactID" />
    </Principal>
    <Dependent Role="Address">
      <PropertyRef Name="ContactID" />
    </Dependent>
  </ReferentialConstraint>
</Association>

正如您在此处所看到的,一个联系人可以拥有多个地址。我们在这里描述了两种类型之间存在引用。但是,在合同类型中,我们如何能够描述一个案例,实际上,我们可以拥有两个或更多地址。例如,WorkAddress和HomeAddress。在Association中,我们只能描述两种类型相互引用的事实,但在AssociationSet中我们还可以描述一种类型可以使用两种相同的引用来引用其他类型。

对于这种情况,我们可以定义下一个xml:

<EntityContainer Name="ContactsContainer" >
  <EntitySet Name="WorkContacts" EntityType="SampleModel.Contact" />
  <EntitySet Name="HomeContacts" EntityType="SampleModel.Contact" />
  <EntitySet Name="WorkAddresses" EntityType="SampleModel.Address" />
  <EntitySet Name="HomeAddresses" EntityType="SampleModel.Address" />
  <AssociationSet Name="ToWorkAddress" Association="SampleModel.FK_Address_Contact">
    <End Role="Contact" EntitySet="WorkContacts" />
    <End Role="Address" EntitySet="WorkAddresses" />
  </AssociationSet>
  <AssociationSet Name="ToHomeAddress" Association="SampleModel.FK_Address_Contact">
    <End Role="Contact" EntitySet="HomeContacts" />
    <End Role="Address" EntitySet="HomeAddresses" />
  </AssociationSet>
</EntityContainer>