2011-07-09 27 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