AssociationSet - это контейнер для ассоциации.
Давайте начнем с простого случая, когда у нас есть типы Контракта и Адреса.Его связь может быть описана в 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>