2013-02-18 24 views
0

所以我試圖防止應用程序之間的競爭條件。在實體框架更新後獲取修改對象的列表

使用的IsolationLevel/TransactionScope的,我可以鎖定表,我需要的方式,但需要先運行更新操作,然後修改的對象的列表進行操作。

要做到這一點,我需要運行更新,並得到一次性的更新ID的所有列表。

如果我試着先取的ID,這不會鎖表,而另一個應用程序實例可以查詢同一名單,他們被標記了。

有沒有辦法做這樣的事情:

//modify some objects  
var updatedIds = context.SaveChanges(); 
//Process updatedIds 

有沒有辦法做到這一點?我嘗試過查看ObjectContext條目,但在保存之後似乎沒有任何東西。

也許我必須做一個sproc?

+0

這是否幫助? http://stackoverflow.com/questions/3131347/check-if-there-are-any-pending-changes-to-be-saved – Yuck 2013-02-18 14:16:50

回答

0

該代碼可以進入你的Context類,應該給你你需要什麼

public override int SaveChanges() 
{ 
    using (var scope = new System.Transactions.TransactionScope()) 
    { 
     //pre processing 
     var result = base.SaveChanges(); 
     //post processing 
     scope.Complete(); 
     return result; 
    } 
} 
+0

我最終編寫了一個SP來更新行並使用OUTPUT返回ID,再加上這裏寫的一個交易範圍。謝謝 – Bobby 2013-03-03 22:15:33

相關問題