2011-06-07 14 views
1

我有一些代碼需要運行每次一個實體插入到我的數據庫,問題是這個代碼需要實體PrimaryKey。
我發現我可以通過EntityState.Unchanged從ObjectStateManager獲取實體,並且這是插入後的對象,但我不確定這是否始終是ObjectContext中唯一具有「Unchanged」作爲其EntityState的對象。運行代碼針對實體插入ObjectContext的可靠方法?

是否有一種可靠的方式來運行代碼只針對已被插入ObjectContext的對象?

回答

1

是的,有一種方法。您必須致電超過SaveChanges,這將不會在自動保存後接受更改,而是您將負責呼叫AcceptAllChanges。在這種情況下,對象在調用SaveChanges後仍然處於Added狀態(但直到您撥打AcceptAllChanges)。一般的代碼應該是這樣的:

using (var scope = new TransactionScope(...)) 
{ 
    context.SaveChanges(SaveOptions.DetectChangesBeforeSave); 

    // Run your code here 

    context.AcceptAllChanges(); 
    scope.Complete(); 
} 

交易範圍是沒有必要的 - 它是方法只是舉例來說,如果你發佈插入代碼必須與插入的事務中運行。

您也可以將該代碼封裝到覆蓋SaveChanges中,以便在集中的位置使用該代碼。

相關問題