Entity Framework 4 - AddObject vs Attach

Ich arbeite mit Entity Framework 4 seit kurzem und bin etwas verwirrt, als bei der Verwendung ObjectSet.Befestigenund ObjectSet.AddObject.

Aus meinem Verständnis:

  • Verwenden Sie "Anhängen", wenn ein Unternehmen schon im system vorhanden ist
  • Verwenden "AddObject", wenn die Schaffung einer Marke neue Person

So, wenn ich mich erstellen einer neuen PersonTue ich dies.

var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();

Wenn ich ändern einer vorhandenen PersonTue ich dies:

var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();

Beachten Sie, dies ist ein sehr einfach Beispiel. In Wirklichkeit bin ich Reine POCO ' s (keine code-generation), Repository-pattern (befassen sich nicht mit ctx.Personen), und die Arbeitseinheit (befassen sich nicht mit ctx.SaveChanges). Aber "unter der Haube", die oben ist was passiert in meiner Implementierung.

Nun meine Frage - ich bin noch zu finden, ein Szenario, wo ich zu verwenden habe Befestigen.

Was vermisse ich hier? Wann müssen wir die Verwendung Befestigen?

BEARBEITEN

Nur zur Klarstellung, ich bin auf der Suche nach Beispiele der Verwendung von Anhängen über AddObject (oder Umgekehrt).

EDIT 2

Den unten Antwort richtig ist (was ich akzeptiert), aber dachte, ich würde hinzufügen, ein weiteres Beispiel, wo Befestigen nützlich wäre.

In meinem obigen Beispiel für ändern einer vorhandenen Person zwei Abfragen tatsächlich ausgeführt wird.

Eine zum abrufen der Person (.SingleOrDefault), und ein weiteres, um das UPDATE durchzuführen (.SaveChanges).

Wenn (aus irgendeinem Grund), ich wusste schon, dass "max Mustermann" existiert im system, warum eine zusätzliche Abfrage, um ihn zuerst? Ich konnte dies tun:

var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();

Dies wird im Ergebnis nur eine UPDATE-Anweisung ausgeführt wird.

InformationsquelleAutor der Frage RPM1984 | 2010-10-13

Schreibe einen Kommentar