Verhindert, dass Entity Framework Entitäten automatisch anfügt

8

Ich benutze das Entity Framework, und seine Entitäten werden verwendet, Datenbank-Darstellung UND Business-Objekt.
Das bedeutet, dass einige manipulierte Entitäten immer vom Kontext getrennt bleiben sollten.

Ich habe es geschafft, Daten aus der Datenbank zu lesen und zu schreiben, aber ich habe ein kleines Problem beim Update:
Ich habe eine Tabelle "Stock", die mit einer Tabelle "Warehouse" verknüpft ist.

Der aktuelle Prozess ist dieser (vereinfacht, aber der Geist bleibt, es gibt mehr Felder):

  • ein neues Objekt Ein Stock wird erstellt und seine Felder werden mit einigen Werten (Datum ...)
  • gefüllt
  • Das aktuelle Warehouse (Objekt, das für die gesamte Anforderung aus der Datenbank abgerufen wurde) ist dem Stock-Objekt
  • zugeordnet
  • Das Objekt wird an die DAL-Methode gesendet, die es speichert.
  • Die DAL-Methode prüft, ob die Bestandsartikel für den Tag (gleiches Datum, Depot und gleicher Typ) bereits in der Datenbank vorhanden sind
  • Falls es existiert, aktualisiert die Methode den Datenträger vom gezogenen Objekt und speichert die Änderungen.
  • Ansonsten wird das neue Stock-Objekt eingefügt.

Das Problem hierbei ist, dass das Objekt EntityState automatisch auf "Added" gesetzt wird, wenn ich das neue Stock-Objekt erstelle und es dem Warehouse-Objekt zuordne. Wenn ich also SaveChanges () führe und der Stock bereits existiert, wird die Zeile aktualisiert UND eine neue Stock-Zeile wird hinzugefügt ...
Was ich möchte, ist, das neue Stock-Objekt Detached zu behalten, bis ich es selbst anhefte. Ich will nicht, dass es automatisch passiert.

Die einzige Lösung, die ich gefunden habe, ist, das neue Objekt vor dem Speichern aus dem Kontext zu entfernen, wenn das Objekt bereits existiert.
Ich könnte auch das Warehouse-Objekt lösen, aber das ist keine befriedigende Lösung. Ich denke, dass es im echten Fall mehr Elemente zu assoziieren gibt und ich bin nicht sicher, ob es eine gute Idee ist, mit Attach () und Detach () darauf zu spielen .
In diesem Fall, bis ich es selbst dem Kontext "hinzufüge", ist das Objekt nur ein "Transport" -Objekt und ich möchte, dass es außerhalb des Kontexts bleibt.

Irgendeine Idee, wie ich das Stock-Objekt gelöst halten könnte?

Code (es kann ein bisschen falsch sein, ich habe es auswendig geschrieben):

%Vor%

In Speichern ():

%Vor%     
Julien N 20.11.2009, 16:54
quelle

1 Antwort

1

Wahrscheinlich möchten Sie die MergeOption nur auf einen geeigneten Wert setzen. NoTracking würde alles in einem getrennten Zustand halten und Ihnen erlauben, Ihre manuelle Arbeit auszuführen. Es gibt wahrscheinlich andere Möglichkeiten, dies zu tun, aber ich mache etwas ähnliches, indem ich MergeOption auf detached setze.

Ссылка

    
Tim Ridgely 20.11.2009 17:11
quelle

Tags und Links