2011-07-09 22 views
11

我需要做这样的事情在我运行SQL事件探查器,但不能看到的begin tran事务上下文TransactionScope,在哪里开始sql事务探查器?

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

,是代码块是否正确?我错过了什么吗?

+2

也许你已经然后过滤掉?你也可以尝试在事务内部创建ctx,只是为了看看我改变了什么。 –

+0

为什么你使用这个代码块的事务范围? SaveChanges'在内部使用事务,除非您使用多个事务资源或多次调用'SaveChanges',否则不需要它。 –

+0

拉吉斯拉夫,这是为了防止错误的数据,别人可以修改另一个方法收银员的钱,如果它不是交易,这个信息将是错误 – Alexandre

回答

19

就像@Marc说,在他的评论,很可能被过滤掉的消息。您只会在默认配置文件中选取T-SQL事务消息,而不是直接使用API​​发送的事务消息(如TransactionScope所做的那样)。

在SQL Server Profiler中,去跟踪事件的选择,并选中“显示所有事件”复选框。在底部是一个“交易”类别,它应该给你你需要的东西。具体而言,以TM:开头的事件。

+0

就是这个亚当! TKS – Alexandre