11

tengo que hacer algo como esto en un contexto de transacciónTransactionScope, ¿dónde comienza la transacción en SQLl Profiler?

using(var context = new Ctx()) 
{ 

using (TransactionScope tran = new TransactionScope()) 
{ 
    decimal debit = 10M; 
    int id = 1; 

    var data = context.Cashier 
     .Where(w => w.ID == id) 
     .Select(s => new{ s.Money }) 
     .Single(); 


    Cashier cashier = new Cashier(){ ID = id }; 
    context.Cashier.Attach(cashier); 

    cashier.Money = data.Money - debit; 
    context.Entry(cashier).Property(p => p.Money).IsModified = true; 

    context.SaveChanges(SaveOptions.None); 
    tran.Complete(); 
} 
} 

estoy ejecutando el Analizador de SQL pero no puede ver comenzará tran, es ese bloque de código correcto? ¿Me estoy perdiendo de algo?

+2

Posiblemente se haya filtrado? También podría tratar de tener la creación de ctx dentro de la transacción, solo para ver que cambia algo. –

+0

¿Por qué usa el alcance de transacción para este bloque de código? 'SaveChanges' utiliza la transacción internamente si no la define, de modo que a menos que esté utilizando múltiples recursos transaccionales o llamando a' SaveChanges' varias veces, no la necesita. –

+0

Ladislav, es para evitar datos incorrectos, alguien más puede modificar el dinero del cajero en otros métodos, si no está en la transacción, esta información será incorrecta – Alexandre

Respuesta

19

Como @Marc dijo en su comentario, los mensajes probablemente están siendo filtrados. Solo seleccionaría los mensajes de transacción T-SQL en el perfil predeterminado, no los mensajes de transacción que se envían usando la API directamente (como lo hace TransactionScope).

En SQL Server Profiler, vaya a la selección del evento de seguimiento y marque la casilla de verificación "Mostrar todos los eventos". Abajo en la parte inferior se encuentra una categoría de "Transacciones", y debe darle lo que necesita. Específicamente, los eventos que comienzan con TM:.

+0

eso es todo Adam! tks – Alexandre

Cuestiones relacionadas