2009-11-20 14 views
8

Sto utilizzando Entity Framework e le sue entità sono utilizzate come rappresentazione del database E oggetto aziendale.
Ciò significa che alcune entità manipolate devono sempre rimanere separate dal contesto.Prevenire Entity Framework per collegare automaticamente le entità

Sono riuscito a leggere e scrivere dati dal database ma ho un piccolo problema durante l'aggiornamento:
Ho una tabella "Stock" che è collegata a una tabella "Magazzino".

L'attuale processo è questo (semplificato, ma lo spirito resta, ci sono più campi):

  • un nuovo oggetto della viene creato e suoi campi sono pieni di alcuni valori (data ...)
  • il magazzino corrente (oggetto estratto per l'intera richiesta dal database) è associato all'oggetto Stock
  • l'oggetto viene inviato al metodo DAL che funziona è quello di salvarlo.
  • Il metodo DAL verifica se l'articolo di magazzino esiste già per il giorno (stessa data, deposito e stesso tipo) nel database
  • Se esiste, il metodo aggiorna il volume dall'oggetto estratto e salva le modifiche.
  • Altrimenti, viene inserito il nuovo oggetto Stock.

Il problema qui è che quando creo il nuovo Stock oggetto e associarlo al magazzino, l'EntityState oggetto viene automaticamente impostato su "Aggiunto". Quindi quando eseguo SaveChanges() e lo Stock esiste già, la riga viene aggiornata E viene aggiunta una nuova riga Stock ...
Quello che vorrei è mantenere il nuovo oggetto Stock scollegato finché non lo allego da solo. Non voglio che accada automaticamente.

L'unica soluzione che ho trovato è staccare il nuovo oggetto dal contesto prima di salvare se l'oggetto esiste già.
Potrei anche staccare() l'oggetto Warehouse ma questa non è una soluzione soddisfacente Penso che nel caso reale ci siano più elementi da associare e non sono sicuro che sia una buona idea giocare con Attach() e Detach() su di essi.
In questo caso, finché non lo aggiungo al contesto, l'oggetto è solo un oggetto "Trasporto" e mi piacerebbe che rimanesse fuori dal contesto.

Qualche idea su come mantenere l'oggetto Stock distaccato?


codice (potrebbe essere un po 'scorretto, ho scritto a 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); 

In 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 stesso per me! L'hai capito? –

+0

Purtroppo no.E non ricordo la soluzione che ho usato. Penso di aver iniziato a usare oggetti POCO. –

risposta

Problemi correlati