2011-02-24 19 views
8

Entity Framework utilizza una transazione per quando si chiama SaveChanges nel proprio contesto? Esiste un modo per disattivare completamente le transazioni o rinunciare a una determinata entità da una transazione?In che modo Entity Framework gestisce le transazioni?

AdventureWorksEntities db = new AdventureWorksEntities(); 

Product p1 = new Product(); 
// ... 

Product p2 = new Product(); 
// set invalid data 

db.Products.AddObject(p1); 
db.Products.AddObject(p2); 

// what happens when I call this - does it roll back everything? 
// can i tell p2 not to participate in the transaction? 
db.SaveChanges(); 

risposta

7

, EF4 creerà una nuova transazione se non esiste già. Vedere

http://msdn.microsoft.com/en-us/library/bb896325.aspx

Quando si chiama SaveChanges, se esiste una transazione corrente , Entity Framework utilizza questa transazione per operazioni contro l'origine dei dati. In caso contrario, viene creata una nuova transazione per l'operazione. È possibile definire le transazioni con utilizzando EntityTransaction, Transaction o TransactionScope.

No, non c'è modo di esentare una singola entità dalla transazione.

Non sono sicuro della terza domanda: se è possibile disattivare completamente le transazioni, ma suppongo che non sia basata sull'estratto precedente.

So che questa non è la risposta che volevi sentire, ma se si vuole P2 per salvare indipendentemente dal fatto P1 ha esito positivo, si avrebbe bisogno di salvare P2 in un contesto oggetto diverso.

+0

Provare a non aggiungere una risposta, eliminarlo e aggiungerne un altro. Invece, modifica la tua risposta originale. – RPM1984

+0

Notato - grazie :) –

+0

La risposta eliminata originale viene ancora visualizzata quando si passa a questa domanda? –

1

Riguardo all'ultima domanda sulla disattivazione delle transazioni.
Provare a creare TransactionScope con Sopprimi TransactionScopeOption per disattivare completamente le transazioni per il blocco di codice. Dai un'occhiata a this thread per ulteriori informazioni.

+0

Darò un'occhiata, grazie. – Dismissile

+0

non aiuta. – AGuyCalledGerald

Problemi correlati