Fügen Sie eine Operation mit einer Viele-zu-Viele-Beziehung mithilfe von EF ein

8

Ich habe zwei Modellklassen:

%Vor%

Mein DbContext-Name ist JobsContext.

Der obige Code generiert mir 3 Tabellen Kandidaten, Jobs & amp; CandidatesJobs (von EF selbstgeneriert)

Jetzt habe ich Datensätze in der Jobtabelle: Id = 1, Name="Sales": Id = 2, Name="Engineer".

Ich möchte einen neuen Kandidaten zuordnen, den ich in die Kandidaten-Tabelle mit den 2 Datensätzen aus der Job-Tabelle einfügen werde.

Vor dem Einfügen des Kandidaten kenne ich die IDs der Jobs Tabelle & amp; Ich möchte die Datenbank nicht aufrufen, um weitere Details aus der Jobtabelle zu erhalten.

Wie mache ich das mit Entity Framework 5?

    
Jonah Pereira 02.10.2013, 06:15
quelle

3 Antworten

17

Wie wäre es damit?

%Vor%

Dies funktioniert nur, wenn Sie die Jobs bereits aus der Datenbank innerhalb der gleichen Instanz von DbContext abgerufen haben, andernfalls wird EF denken, dass die Jobs "neu" sind und versucht, sie einzufügen. Wenn Sie nur die IDs haben, können Sie Folgendes versuchen:

%Vor%     
Henk Mollema 02.10.2013, 08:16
quelle
6

Es gibt zwei Möglichkeiten.

Wenn Sie den gleichen Kontext und die gleichen Kandidatenobjekte haben möchten, können Sie einfach die vorhandenen Kandidatenobjekte zum Job hinzufügen. Beispielsweise: Erstellen Sie Ihre Kandidaten und speichern Sie sie in der Datenbank:

%Vor%

Dann erstellen Sie Ihren Job:

%Vor%

Fügen Sie schließlich Ihre Kandidaten der neuen Variablen job hinzu, fügen Sie den Job dem Kontext hinzu und speichern Sie die Änderungen.

%Vor%

ODER

Wenn Sie einen anderen Kontext verwenden als den, mit dem Sie die Kandidaten erstellt haben, können Sie ein neues Kandidatenobjekt erstellen und an den Kontext anhängen, bevor Sie es dem Job hinzufügen.

%Vor%

Erstellen Sie unser Kandidatenobjekt, indem Sie nur die ID

festlegen %Vor%

Hängen Sie das Objekt an den neuen Kontext an. Hinweis: Wenn der Kontext aus dem obigen Beispiel immer noch vorhanden ist, können Sie dies nicht tun, da er den Kandidaten bereits verfolgt.

%Vor%

Setzen Sie den Status auf Unverändert, da wir keinen neuen Kandidaten erstellen möchten, sondern nur den vorhandenen.

%Vor%

Fügen Sie es hinzu und speichern Sie die Änderungen.

%Vor%

Fertig!

    
cbeckner 02.10.2013 07:36
quelle
0

Eine sehr einfache Lösung besteht darin, eine VIEW der XRef-Tabelle genau wie die Tabelle (view_tablename_raw) zu erstellen. Aktualisieren Sie dann diese Ansicht in EF als eine Entität ohne Fremdschlüssel. Von ihrer Verwendung Kontext .view_tablename_raw.Add (...) und es wird nahtlos funktionieren.

    
HackTheDj 23.07.2017 12:08
quelle