Поделиться через


Элемент AssociationSetMapping (язык MSL)

Сопоставление ассоциации в модели Entity Data Model (EDM) позволяет определить в таблицах данных столбцы, соответствующие элементам EndProperty связанных сущностей. Чтобы сущности в концептуальной схеме были связаны, в таблице данных должен быть столбец внешнего ключа, который содержит какое-нибудь свойство другой таблицы. Обычно этот столбец внешнего ключа соответствует свойству ключа сущности.

Элемент AssociationSetMapping указывается внутри элемента EntityContainerMapping. Следующая декларация Employee_Employee_ManagerIDAssociationSetMapping определяет сопоставление сущностей AssociationSet и TypeName, заданных в концептуальной схеме AdventureWorksHRModel.

Поскольку обе связанные сущности являются сущностями Employee, одна таблица содержит данные для обеих сущностей. Элементы EndProperty в этом примере указывают роль каждой связанной сущности, определенной в концептуальной схеме, а элементы ScalarProperty указывают свойство каждой сущности и столбец ColumnName, которому соответствует свойство. Оба элемента этой ассоциации являются сущностями Employee, а идентифицирующее свойство в каждом случае связано с соответствующим столбцом EmployeeID таблицы данных Employee. Условие определяет, что столбцу ManagerID второй таблицы Employee должно быть назначено значение, или Association недопустима.

<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S" 
    xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
  <EntityContainerMapping CdmEntityContainer="HumanResources" 
StorageEntityContainer="HumanResources">

    <AssociationSetMapping Name="Employee_Employee_ManagerID" 
TypeName="AdventureWorksHRModel.Employee_Employee_ManagerID" 
StoreEntitySet="Employee">
      <EndProperty Name="Employee">
        <ScalarProperty Name="EmployeeID" ColumnName="ManagerID" />
      </EndProperty>
      <EndProperty Name="EmployeeManager">
        <ScalarProperty Name="EmployeeID" ColumnName="EmployeeID" />
      </EndProperty>
      <Condition ColumnName="ManagerID" IsNull="false" />
    </AssociationSetMapping>

  </EntityContainerMapping>

В этом примере элемент AssociationSetMapping содержится в схеме AdventureWorksHRModel. Элемент HumanResourcesEntityContainerMapping этого сопоставления AssociationSetMapping сопоставляется ассоциации Employee_Employee_ManagerID. Ассоциация связывает сущность сотрудника с другой сущностью сотрудника, обозначенного как менеджер.

Это сопоставление зависит от условия Condition, указанного в последней строке элемента AssociationSetMapping. Чтобы ассоциация была допустимой, она должна соединять сущность Employee с другой сущностью Employee, обозначенной как менеджер значением внешнего ключа в столбце ManagerID таблицы Employee. Если этому столбцу не назначено значение, то условие не соответствует и назначение дополнительных сведений в ассоциации будет бессмысленным. Если ассоциация этого вида создана в программном коде и столбец ManagerID содержит значение NULL, ассоциация вызывает исключение при вызове метода SaveChanges.

См. также

Основные понятия

Элемент EntityContainerMapping (язык MSL)
Элемент Association (язык CSDL)
Элемент AssociationSet (EntityContainer, язык CSDL)
Элемент Association (язык SSDL)
Элемент AssociationSet (EntityContainer, язык SSDL)
Полная модель AdventureWorks (модель EDM)