He estado trabajando con Entity Framework 4 recientemente, y estoy un poco confundido sobre cuándo usar ObjectSet.Attach y ObjectSet.AddObject .
Desde mi entendimiento:
- Use "Adjuntar" cuando ya exista una entidad en el sistema
- Use "AddObject" al crear una nueva entidad
Entonces, si estoy creando una nueva Persona , hago esto.
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();
Si estoy modificando una Persona existente , hago esto:
var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();
Tenga en cuenta que este es un ejemplo muy simple . En realidad estoy usando Pure POCO's (sin generación de código), patrón de repositorio (no trate con ctx.Persons) y Unit of Work (no trate con ctx.SaveChanges). Pero "bajo las sábanas", lo anterior es lo que sucede en mi implementación.
Ahora, mi pregunta : todavía no he encontrado un escenario en el que haya tenido que usar Attach .
que me estoy perdiendo aqui? ¿Cuándo necesitamos usar Attach?
EDITAR
Solo para aclarar, estoy buscando ejemplos de cuándo usar Adjuntar sobre AddObject (o viceversa).
EDITAR 2
La respuesta a continuación es correcta (que acepté), pero pensé que agregaría otro ejemplo donde Attach sería útil.
En mi ejemplo anterior para modificar una Persona existente , se están ejecutando dos consultas.
Uno para recuperar la Persona (.SingleOrDefault) y otro para realizar la ACTUALIZACIÓN (.SaveChanges).
Si (por alguna razón), ya sabía que "Joe Bloggs" existía en el sistema, ¿por qué hacer una consulta adicional para obtenerlo primero? Yo podría hacer esto:
var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();
Esto dará como resultado que solo se ejecute una instrucción UPDATE.