Моя модель данных содержит две таблицы с составными первичными ключами и ассоциативную таблицу. Часть составного первичного ключа является общей для таблиц.
SitePrivilege
-------------
SiteId
PrivilegeId
UserSite
--------
SiteId
UserId
UserSitePrivilege
-----------------
UserId
SiteId
PrivilegeId
Я создал сущность SitePrivilege и сущность UserSite. Я сопоставил связь между многими из них с UserSitePrivilege.
<Association Name="UserSiteSitePrivilege">
<End Type="PrivilegeModel.UserSite" Multiplicity="*" Role="UserSite" />
<End Type="PrivilegeModel.SitePrivilege" Multiplicity="*" Role="SitePrivilege" />
</Association>
...
<AssociationSetMapping Name="UserSiteSitePrivilege" TypeName="PrivilegeModel.UserSiteSitePrivilege" StoreEntitySet="UserSitePrivilege">
<EndProperty Name="SitePrivilege">
<ScalarProperty Name="PrivilegeId" ColumnName="PrivilegeId" />
<ScalarProperty Name="SiteId" ColumnName="SiteId" />
</EndProperty>
<EndProperty Name="UserSite">
<ScalarProperty Name="SiteId" ColumnName="SiteId" />
<ScalarProperty Name="UserId" ColumnName="UserId" />
</EndProperty>
</AssociationSetMapping>
Приведенный выше код выдает эту ошибку:
Каждый из следующих столбцов в таблице
UserSitePrivilege сопоставлен с
несколько концептуальных побочных свойств:
UserSitePrivilege.SiteId сопоставлен с
UserSiteSitePrivilegeSitePrivilege.SiteId,
UserSiteSitePrivilege.UserSite.SiteId
Итак, я добавил ссылочное ограничение.
<Association Name="UserSiteSitePrivilege">
<End Type="PrivilegeModel.UserSite" Multiplicity="*" Role="UserSite" />
<End Type="PrivilegeModel.SitePrivilege" Multiplicity="*" Role="SitePrivilege" />
<ReferentialConstraint>
<Principal Role="UserSite">
<PropertyRef Name="SiteId"/>
</Principal>
<Dependent Role="SitePrivilege">
<PropertyRef Name="SiteId"/>
</Dependent>
</ReferentialConstraint>
</Association>
...
<AssociationSetMapping Name="UserSiteSitePrivilege" TypeName="PrivilegeModel.UserSiteSitePrivilege" StoreEntitySet="UserSitePrivilege">
<EndProperty Name="SitePrivilege">
<ScalarProperty Name="PrivilegeId" ColumnName="PrivilegeId" />
<ScalarProperty Name="SiteId" ColumnName="SiteId" />
</EndProperty>
<EndProperty Name="UserSite">
<ScalarProperty Name="SiteId" ColumnName="SiteId" />
<ScalarProperty Name="UserId" ColumnName="UserId" />
</EndProperty>
</AssociationSetMapping>
Теперь выдает эту ошибку:
Свойства, указанные Принципалом
Роль UserSite должна быть точно
идентичный ключу EntityType
PrivilegeModel.UserSite, на который ссылается
Основная роль в отношениях
ограничение для отношений
PrivilegeModel.UserSiteSitePrivilege.
Убедитесь, что все ключевые свойства
указано в основной роли.
Как правильно смоделировать эти отношения?