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'.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage