ผมได้ทำงานกับ Entity Framework 4 เมื่อเร็ว ๆ นี้และกำลังสับสนเล็กน้อยว่าเมื่อใช้ObjectSet.AttachและObjectSet.AddObject
จากความเข้าใจของฉัน:
- ใช้ "แนบ" เมื่อมีเอนทิตีอยู่แล้วในระบบ
- ใช้ "AddObject" เมื่อสร้างเอนทิตีใหม่
ดังนั้นถ้าฉันกำลังสร้างบุคคลใหม่ฉันจะทำสิ่งนี้
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();
หากฉันแก้ไขบุคคลที่มีอยู่ฉันจะทำสิ่งนี้:
var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();
โปรดทราบว่านี่เป็นตัวอย่างง่ายๆ ในความเป็นจริงฉันใช้ Pure POCO (ไม่มีการสร้างรหัส) รูปแบบพื้นที่เก็บข้อมูล (อย่าจัดการกับ ctx.Persons) และ Unit of Work (อย่าจัดการกับ ctx.SaveChanges) แต่ "ภายใต้การครอบคลุม" ข้างต้นคือสิ่งที่เกิดขึ้นในการนำไปใช้
ตอนนี้คำถามของฉัน - ฉันยังไม่พบสถานการณ์ที่ฉันได้มีการใช้แนบ
ฉันพลาดอะไรไปที่นี่? เราต้องใช้ Attach เมื่อไร?
แก้ไข
เพื่อชี้แจงฉันกำลังมองหาตัวอย่างว่าเมื่อใดควรใช้ Attach over AddObject (หรือกลับกัน)
แก้ไข 2
คำตอบด้านล่างนี้ถูกต้อง (ซึ่งฉันยอมรับ) แต่คิดว่าฉันจะเพิ่มอีกตัวอย่างหนึ่งที่ Attach จะเป็นประโยชน์
ในตัวอย่างด้านบนของฉันสำหรับการแก้ไขบุคคลที่มีอยู่มีการดำเนินการค้นหาสองคำค้นหา
หนึ่งในการดึงข้อมูลบุคคล (.ingleOrDefault) และอีกรายการหนึ่งเพื่อทำการอัปเดต (.aveChanges)
ถ้า (ด้วยเหตุผลบางประการ) ฉันรู้แล้วว่ามี "Joe Bloggs" อยู่ในระบบเหตุใดจึงต้องสอบถามเพิ่มเติมเพื่อให้เขาทราบก่อน ฉันสามารถทำได้:
var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();
สิ่งนี้จะส่งผลให้มีการดำเนินการเพียงคำสั่ง UPDATE