Как добавить ассоциацию EF6 к ключу-кандидату / уникальному ключу, который не является первичным ключом?
С помощьюСхема перваяУ меня есть структура базы данных, так что
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 / CSDL1 имеет это
<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, на который ссылается основная роль в ограничении отношений для Relationship FK_ExtMaps_ExtDataItems. Убедитесь, что все ключевые свойства указаны в главной роли.
«Основная роль» (?) Для SSDL ExternalDataItems выглядит следующим образом для PK, и UX, по-видимому, отсутствует2, кроме как в качестве простого скалярного свойства:
<EntityType Name="ExternalDataItems">
<Key>
<PropertyRef Name="edataitem_id" />
</Key>
..
<Property Name="datahash" Type="binary" MaxLength="20" Nullable="false" />
</EntityType>
Как я могу добавить это отношение - используя FK к ключу-кандидату не PK? (После того, как это «сработает», я также хочу иметь свойство навигации в CSDL.)
Кроме того, линия связи не отображается в области проектирования - что, я подозреваю, является просто следствием этой ошибки. Я использую 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'.