48

Me gustaría saber cuál es la mejor manera de implementar transacciones con DBContext. En particular,Código EF First DBContext and Transactions

  1. ¿DbContext.SaveChanges implementa la transacción interna si cambio varias entidades?
  2. Si quiero llamar al DbContext.SaveChanges varias veces (mismo contxet/diferentes contxets), ¿cómo se puede lograr la transacción?

Respuesta

71
  1. Sí. SaveChanges usa transacción internamente.
  2. Uso TransactionScope para envolver varias llamadas a SaveChanges

Ejemplo:

using(var scope = new TransactionScope(TransactionScopeOption.Required, 
    new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) 
{ 
    // Do something 
    context.SaveChanges(); 
    // Do something else 
    context.SaveChanges(); 

    scope.Complete(); 
} 
+5

asegúrese de estar utilizando SQL 2008 o más tarde como la base de datos (o tienen el servicio MSDTC se ejecuta en el cliente). Las versiones anteriores escalarán la transacción a una transacción distribuida en el segundo 'SaveChanges'. Esto se debe a cómo 'DbContext' maneja internamente la apertura y el cierre de su conexión. – Lukazoid

+0

¿Es posible obtener una identidad de los primeros cambios guardados? Siempre veo Id = 0. – JarrettV

+0

@JarrettV - Creo que su problema se debe a la configuración IsolationLevel. Bajarlo podría ayudar ... – Sunny

Cuestiones relacionadas