2009-11-11 8 views
6

Ist es möglich, Associates b/t 2 Nicht-Schlüsselfelder im Entity Framework zu erstellen?Entity Framework Association mit Nicht-Schlüsselfelder

Beispiel: Nehmen Sie die 2 Tabellen in einer Legacy-Anwendung (dh Tasten/Struktur nicht ändern kann)

Order (
    OrderId : int : PK 
    OrderNo : varchar 
) 

OrderDetails (
    DetailRecordId : int : PK 
    OrderNo : varchar 
) 

Im Entity Framework, ich möchte einen Verein b/t Order und OrderDetails vom OrderNo Feld erstellen Dies ist kein Primärschlüssel für eine Tabelle oder eine FK-Beziehung in der Datenbank.

Dies scheint mir nicht nur einfach zu tun, sondern auch ein Grund, etwas wie EF zu verwenden. Es scheint mir jedoch nur erlaubt zu sein, Assoziationen mit Entity Keys zu erstellen.

Antwort

6

Das Entity Framework ermöglicht Ihnen Anspruch, dass Spalten Schlüssel sind und dass FK-Einschränkungen existieren, wo keine tatsächlich in der Datenbank vorhanden sind.

Das ist, weil die SSDL (StorageModel Teil der EDMX) kann von Ihnen und über die Datenbank manipuliert werden.

Die EF wird dann mit der Datenbank interagieren, als ob die Schlüssel und Fremdschlüssel wirklich existieren.

Dies sollte funktionieren, aber alle üblichen Vorbehalte bezüglich referenzieller Integrität gelten.

Meine Entity Framework Tips

Hoffnung, das hilft.

+0

+1 Also bedeutet das, dass ich die .edmx Datei manuell bearbeiten muss? –

+0

Leider ja. –

+0

Danke nochmal. Eine letzte Frage. Wenn ich den EDMX bearbeite, wie wird das funktionieren, wenn ich den Assistenten verwenden möchte, um das Modell zu aktualisieren? Bleiben meine benutzerdefinierten Änderungen bestehen oder wenn ich die "Edit EDMX" Route starte, muss ich alle Änderungen manuell vornehmen? –

1

Das Problem bei der Verwendung von Nicht-Schlüsselfeldern zum Definieren von Beziehungen besteht darin, dass die Schlüssel nicht garantiert korrekt navigierbar sind. Dies könnte zu einer Situation führen, in der Sie eine Eins-zu-eins-Beziehung zwischen zwei Entitäten haben, bei denen mehr als eine mögliche Zeile die Beziehung erfüllt.

... Wenn Sie Daten aus einer Datenbank beziehen, sollten die Beziehungen immer auf Schlüsseln basieren. Die Schlüssel erzwingen die referenzielle Integrität.

+3

Die Frage schaffen wird, wird es es erlauben. sagen wir, ich bin 100% sicher, dass das nicht passieren würde ... wird EF mir erlauben, die Beziehung zu machen, obwohl es offensichtlich keine gute Übung ist? –

0

Eine weitere Abhilfe:

Ansicht vorder schaffen, die PK nicht enthalten und erstellen Entity davon. Set PK in dieser Einheit OrderNo

Jetzt werden Sie in der Lage sein Verein obwohl