Saya telah bekerja dengan Entity Framework 4 baru-baru ini, dan saya sedikit bingung kapan harus menggunakan ObjectSet.Attach , dan ObjectSet.AddObject .
Dari pengertian saya:
- Gunakan "Lampirkan" ketika Entitas sudah ada di sistem
- Gunakan "AddObject" saat membuat Entitas baru
Jadi, jika saya membuat Orang baru , saya melakukan ini.
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();
Jika saya memodifikasi Orang yang ada , saya melakukan ini:
var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();
Perlu diingat, ini adalah contoh yang sangat sederhana . Pada kenyataannya saya menggunakan Pure POCO (tanpa pembuatan kode), pola Repositori (tidak berurusan dengan ctx.Persons), dan Unit Kerja (jangan berurusan dengan ctx.SaveChanges). Tetapi "di bawah penutup", di atas adalah apa yang terjadi dalam implementasi saya.
Sekarang, pertanyaan saya - saya belum menemukan skenario di mana saya harus menggunakan Lampirkan .
Apa yang kulewatkan di sini? Kapan kita perlu menggunakan Lampirkan?
EDIT
Sekedar klarifikasi, saya sedang mencari contoh kapan harus menggunakan Lampirkan di atas AddObject (atau sebaliknya).
EDIT 2
Jawaban di bawah ini benar (yang saya terima), tetapi saya pikir saya akan menambahkan contoh lain di mana Attach akan berguna.
Dalam contoh saya di atas untuk memodifikasi Orang yang ada , dua pertanyaan sebenarnya sedang dieksekusi.
Satu untuk mengambil Person (.SingleOrDefault), dan satu lagi untuk melakukan UPDATE (.SaveChanges).
Jika (karena alasan tertentu), saya sudah tahu bahwa "Joe Bloggs" ada di sistem, mengapa melakukan permintaan tambahan untuk mendapatkannya terlebih dahulu? Saya bisa melakukan ini:
var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();
Ini akan menghasilkan hanya pernyataan UPDATE yang dieksekusi.