Wie füge ich eine EF6-Zuordnung zu einem Kandidatenschlüssel / eindeutigen Schlüssel hinzu, der nicht der Primärschlüssel ist?
UsingSchema First, Ich habe eine Datenbankstruktur, also
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
und nach dem Generieren der SSDL / CSDL1 hat dieses
<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>
, das auf dem @ einen Fehler erzeu<ReferentialConstraint>
Elemen
Running-Umwandlung: Eigenschaften, auf die von der Hauptrolle ExternalDataItems verwiesen wird, müssen genau mit dem Schlüssel des EntityType ExternalDataItems identisch sein, auf den von der Hauptrolle in der Beziehungsbeschränkung für die Beziehung FK_ExtMaps_ExtDataItems verwiesen wird. Stellen Sie sicher, dass alle Schlüsseleigenschaften in der Hauptrolle angegeben sind.
Die "Hauptrolle" (?) Für ExternalDataItems SSDL sieht für die PK wie folgt aus und die UX scheint nicht vorhanden zu sein2, außer als einfache skalare Eigenschaft:
<EntityType Name="ExternalDataItems">
<Key>
<PropertyRef Name="edataitem_id" />
</Key>
..
<Property Name="datahash" Type="binary" MaxLength="20" Nullable="false" />
</EntityType>
Wie kann ich diese Beziehung mit einem FK zu einem Nicht-PK-Kandidatenschlüssel hinzufügen? (Nachdem dies "funktioniert", möchte ich auch eine Navigationseigenschaft für die CSDL haben.)
Außerdem wird die Verknüpfungslinie nicht in der Entwurfsoberfläche angezeigt - was meiner Meinung nach nur auf diesen Fehler zurückzuführen ist. Ich verwende Entity Framework Version 6.1.1 (zuletzt veröffentlicht auf Nuget) und Visual Studio 2013 Ultimate Update 4.
1Die Standard-EDMX-Version "Update from Database" hat diese FK-Relationen nicht aufgegriffen (diekann mit diesem Fehler in Verbindung stehen) und die obigen Ergebnisse beziehen sich auf die Verwendung des Huagati DBML / EDMX-Tools. Wenn ich zuvor versucht habe, eine Verknüpfung hinzuzufügen, hat der Designer fälschlicherweise versucht, den Primärschlüssel zu verwenden, der von keiner FK-Beziehung unterstützt wird, und keine Optionen für die Auswahl alternativer Eigenschaften bereitgestellt.
2 Versuch, ein @ hinzuzufüg<UniqueConstraint>
Element wie in @ beschrieb "Eindeutige Einschränkungen im Entity Framework" führt zu dem angezeigten XML-Validierungsfehler:
Das Element 'ElementType' .. hat ein ungültiges untergeordnetes Element 'UniqueConstraint'.