Использование схемы Сначала у меня есть структура базы данных, так как
ExternalDataItems
---
edataitem_id PK -- surrogate auto-increment - NOT for FK relation here
datahash UX -- Candidate Key / Unique Index (binary(20))
ExternalMaps
---
emap_id PK
ext_datahash FK on ExternalDataItems.datahash - NOT referencing the surrogate PK
и после генерации SSDL/CSDL 1 имеет этот
<Association Name="FK_ExtMaps_ExtDataItems">
<End Multiplicity="1" Role="ExternalDataItems" Type="Store.ExternalDataItems" />
<End Multiplicity="*" Role="ExternalMaps" Type="Store.ExternalMaps" />
<ReferentialConstraint> <!-- error on this element -->
<Principal Role="ExternalDataItems">
<PropertyRef Name="datahash" />
</Principal>
<Dependent Role="ExternalMaps">
<PropertyRef Name="ext_datahash" />
</Dependent>
</ReferentialConstraint>
</Association>
который генерирует ошибку в элементе <ReferentialConstraint>
Запуск преобразования: свойства, относящиеся к основной роли ExternalDataItems должны быть точно идентичны ключу EntityType ExternalDataItem, на который ссылается основная роль в ограничении связей для отношений FK_ExtMaps_ExtDataItems. Убедитесь, что все ключевые свойства указаны в главной роли.
"Основная роль" (?) для ExternalDataItems SSDL выглядит следующим образом: для ПК и UX не присутствует 2 кроме как простое скалярное свойство:
<EntityType Name="ExternalDataItems">
<Key>
<PropertyRef Name="edataitem_id" />
</Key>
..
<Property Name="datahash" Type="binary" MaxLength="20" Nullable="false" />
</EntityType>
Как я могу добавить это отношение - используя FK к ключу кандидата, отличному от ПК? (После этого "работает" я также хочу, чтобы в CSDL также было свойство Navigation.)
Кроме того, линия связи не появляется на поверхности дизайна, которая, как я подозреваю, является просто следствием этой ошибки. Я использую Entity Framework версии 6.1.1 (последняя опубликована в nuget) и Visual Studio 2013 Ultimate Update 4.
1 Стандартный EDMX "Обновление из базы данных", похоже, не собирал эти отношения FK (который может быть связан с эта ошибка), и результаты, приведенные выше, после использования инструмента Huagati DBML/EDMX. Если бы я попытался "Добавить ассоциацию" до того, как разработчик неправильно попытался бы использовать первичный ключ, который не поддерживается каким-либо отношением FK, и не предоставил опции для выбора альтернативных свойств.
2 Попытка добавить элемент <UniqueConstraint>
, как описано в "Уникальные ограничения в структуре Entity Framework" в дружественной ошибке проверки XML:
Элемент "ElementType".. имеет недопустимый дочерний элемент "UniqueConstraint".