2009-11-20 13 views
8

Estoy utilizando el Entity Framework, y sus entidades se utilizan son la representación de la base de datos Y el objeto comercial.
Por lo tanto, significa que algunas entidades que se manipulan siempre deben permanecer alejadas del contexto.Impedir Entity Framework para adjuntar entidades automáticamente

Logré leer y escribir datos de la base de datos, pero tengo un pequeño problema al actualizar:
Tengo una tabla "Stock" que está vinculada a una tabla "Almacén".

El proceso actual es este (simplificado, pero el espíritu permanece, hay más campos):

  • se crea un nuevo objeto de la y sus campos están llenos de algunos valores (fecha ...)
  • el almacén actual (objeto extraído para toda la solicitud de la base de datos) está asociado al objeto Stock
  • el objeto se envía al método DAL cuyo trabajo es guardarlo.
  • El método DAL comprueba si el elemento Stock ya existe para el día (misma fecha, depósito y mismo tipo) en la base de datos
  • Si existe, el método actualiza el volumen del objeto extraído y guarda los cambios.
  • De lo contrario, se inserta el nuevo objeto Stock.

El problema aquí es que cuando se crea el nuevo archivo objeto y lo asocio al almacén, el EntityState objeto se establece automáticamente en "Alta". Así que cuando realizo SaveChanges() y el Stock ya existe, la línea se actualiza Y se agrega una nueva línea de Stock ...
Lo que me gustaría es mantener el nuevo objeto Stock Independiente hasta que lo adjunte. No quiero que ocurra automáticamente.

La única solución que encontré es separar el nuevo objeto del contexto antes de guardarlo si el objeto ya existe.
También podría separar() el objeto Warehouse, pero esa no es una solución satisfactoria, creo que en el caso real hay más elementos para asociar y no estoy seguro de que sea una buena idea jugar con Attach() y Detach() en ellos.
En este caso, hasta que yo mismo lo "agregue" al contexto, el objeto es solo un objeto "Transporte" y me gustaría que permanezca fuera del contexto.

¿Alguna idea sobre cómo podría mantener el objeto Stock separado?


de código (que puede ser un poco incorrecto, lo escribí por la memoria):

Stock stk = new Stock(); 
stk.Date = DateTime.Now; 
stk.Volume = 100;   //so far stk is "Detached" and that's cool. 
stk.Warehouse = CurrentWarehouse; //stk become "Added" and that's less cool. 

DAL.Stock.Instance.Save(stk); 

En Save():

var existing = (from s in Context.CurrentContext.Stock 
where s.Warehouse.WarehouseId == stk.Warehouse.WarehouseId && s.Date == stk.Date && s.Type == 2 
select s).FirstOfDefault(); 

if(existing != null) 
{ 
    existing.Volume = stk.Volume; 
    Context.CurrentContext.Detach(stk); //I find it a stupid workaround !!!!!! 
} 
else 
{ 
    Context.CurrentContext.AddToStock(stk); //what I would want to do. 
} 

Context.CurrentContext.SaveChanges() 
+0

lo mismo para mí! Lo averiguaste? –

+0

Tristemente no.Y no recuerdo la solución alternativa que utilicé. Creo que comencé a usar objetos POCO. –

Respuesta

Cuestiones relacionadas