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?
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:
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.
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!
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.
Tags und Links asp.net-mvc c# entity-framework many-to-many