2011-02-24 17 views
8

¿Entity Framework usa una transacción para cuando llama a SaveChanges en su contexto? ¿Hay alguna forma de desactivar las transacciones por completo o que una determinada entidad opte por no participar en una transacción?¿Cómo gestiona Entity Framework las transacciones?

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(); 

Respuesta

7

, EF4 va a crear una nueva transacción si no existe ya. Ver

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

Cuando se llama a SaveChanges, si existe una transacción actual , Entity Framework utiliza esta transacción para operaciones contra la fuente de datos. De lo contrario, crea una nueva transacción para la operación. Puede definir transacciones utilizando EntityTransaction, Transaction o TransactionScope.

Sin, no hay manera de eximir a una única entidad de la transacción.

No estoy seguro acerca de su tercera pregunta sobre si puede desactivar las transacciones por completo, pero supongo que no se basará en el extracto de arriba.

Sé que esta no es la respuesta que quería escuchar, pero si desea P2 guardar independientemente de si P1 tiene éxito, tendrá que guardar P2 en un diferente contexto de objeto.

+0

Intente no agregar una respuesta, elimínela y luego agregue otra. En cambio, solo edita tu respuesta original. – RPM1984

+0

Nota: gracias :) –

+0

¿Esa respuesta original eliminada aún aparece cuando navega a esta pregunta? –

1

Con respecto a la última pregunta sobre cómo deshacer las transacciones.
Intente crear TransactionScope con Suprimir TransactionScopeOption para desactivar por completo las transacciones del bloque de código. Eche un vistazo al this thread para obtener más información.

+0

Voy a echar un vistazo, gracias. – Dismissile

+0

no ayuda. – AGuyCalledGerald