No sé exactamente qué quiere decir con myDB.CreateSpecialThing(.....)
. Tengo tres interpretaciones:
objectContext.CreateObject<SpecialThing>()
dbContext.SpecialThings.Create()
(EF> = 4,1)
SpecialThing.Create(.....)
(un método estático de EntityObject
entidades derivadas)
El tercer método es solo un helper autogenerado que toma parámetros (para los campos requeridos), establece adecuadamente ata y devuelve el objeto. Es exactamente lo mismo que crear el objeto con new
y establecer propiedades después.
Los primeros dos métodos entran en juego si está trabajando con POCO y utiliza carga lenta o proxies de seguimiento de cambios. Estos métodos crearán un proxy dinámico de la entidad (que es una clase dinámica derivada de su clase de entidad) y no directamente de la entidad. Ninguno de estos métodos conecta la entidad al contexto, debe hacerlo manualmente, sin importar si usa estos métodos para crear la entidad o crearla con new
.
Ejemplo donde el uso de CreateObject<T>
/Create
puede ser importante, suponiendo una entidad User
con un virtual
Roles
colección:
using (var ctx = new MyDbContext())
{
var user = ctx.Users.Create();
user.Id = 1;
ctx.Users.Attach(user);
var roles = user.Roles;
}
Usando virtual
permite la carga diferida para la recogida Roles
y el código anterior se carga todos los roles de usuario 1 (o una colección vacía si el usuario no tiene roles). Usando new
por el contrario ...
using (var ctx = new MyDbContext())
{
var user = new User { Id = 1 };
ctx.Users.Attach(user);
var roles = user.Roles;
}
... no permite cargar con pereza la colección porque user
no es un objeto proxy dinámico. roles
sería null
, sin importar si el usuario tiene roles o no.
Por lo tanto, yo diría que no hay peligro de crear una entidad con new
.Solo debe tener en cuenta que no tiene las funciones de carga lenta o proxies de seguimiento de cambios para una entidad creada con new
.
Pero lo mismo es cierto para 'myDB.CreateSpecialThing (.....)', al menos para las interpretaciones que pude encontrar para este método. – Slauma