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?
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. –
¿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. –
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