2012-02-28 18 views
5

¿Alguien sabe la diferencia, si la hay, de las siguientes afirmaciones?¿Cuál es la diferencia entre estas dos declaraciones (Entity Framework)

_context.AddObject(user); 

_context.Users.AddObject(user); 

, así como

_context.Attach(user); 

_context.Users.Attach(user); 

Gracias

EDITAR

Lo sentimos cierta confusión:

Sé que la diferencia entre AddObject y Adjuntar, lo que quería decir hay alguna diferencia en t él modo de uso del AddObject decir

_context.AddObject(user); 
_context.Users.AddObject(user); 

Respuesta

1

Un ObjectContext puede tener varios conjuntos con el mismo esquema, por lo que normalmente es mejor usar el conjunto explícito. es decir _context.Users.AddObject(user);

De MSDN:

En la versión de .NET Framework 4, recomendamos que utilice métodos en el objeto ObjectSet para realizar crear, leer, borrar, adjuntar y operaciones de actualización. ObjectSet deriva de ObjectQuery, por lo que también funciona como un objeto de consulta.

En las versiones a partir de la versión de .NET Framework 4, puede utilizar los siguientes métodos definidos en ObjectSet en lugar de los equivalentes definidos en ObjectContext:

AddObject 
Attach 
ApplyCurrentValues 
ApplyOriginalValues 
DeleteObject 
Detach 
0

MSDN answer

Resumen:

AddObject conjuntos de objetos de estado para Added, Attach ajustarlo en el Unchanged. Si luego llama al método SaveChanges(), el contexto intentará insertar un objeto agregado por AddObject en el almacenamiento, mientras que un objeto agregado por Attach se considerará sin cambios y no se realizarán acciones para él.

0

No es simple diferencia porque sus ejemplos son incorrectos No es

context.AddObject(user) 

pero

context.AddObject("UserEntitySet", user) 

Si utiliza AddObject o Attach directamente en contexto debe decirle contexto, que establece que desea añadir o adjuntar el objeto en wheres si utiliza la aplicación directamente en ObjectSet ya tiene esta información envuelta de manera fuertemente tipada.

En mi humilde opinión esos métodos existen solo como compatibilidad con versiones anteriores de EFv1 (.NET 3.5 SP1) donde ObjectSet no existía.

Cuestiones relacionadas