2011-12-28 31 views
5

假如我是在同一時間將在下面的表中的記錄現在
表1
表2
表3
表4
表5如何在LINQ的maintan交易的entites

我想要做的是,在情況的任何異常或錯誤的插入在表3中發生,然後記錄它之前被插入(例如,在表1和表2)必須是回滾...

如何一世像這樣管理交易?

回答

3

默認情況下,調用SaveChanges將在交易(見文檔的Remarks part

如果你想在交易更多的控制執行,你可以用你的SaveChanges在一個TransactionScope塊。然後SaveChanges會收到您的環境交易並使用該交易。

當你想要一個分佈式事務(例如使用多個上下文或如果您使用WCF)這可能是有用的。

至於你提到你使用不同的模型,你就一個TransactionScope的範圍內同時使用ObjectContexts(和使用some logic與AcceptAllChanges)

那麼你的代碼是這樣:

using (TransactionScope scope = new TransactionScope()) 
{ 
    //Do something with context1 
    //Do something with context2 


    //Save Changes but don't discard yet 
    context1.SaveChanges(false); 

    //Save Changes but don't discard yet 
    context2.SaveChanges(false); 


    //if we get here things are looking good. 
    scope.Complete(); 

    //If we get here it is save to accept all changes. 
    context1.AcceptAllChanges(); 
    context2.AcceptAllChanges(); 
} 
+0

燁@scartag感謝好友得到了我的答案,謝謝:) – 2011-12-28 09:49:19

4

這是實體框架4

默認行爲,該交易隱含..只要你撥打的SaveChanges任何錯誤都將觸發回滾。

+0

能否手動處理它?實際上Table1的PrimaryKey是Table2的ForeignKey,Table2的PK是Table3的FK,等等......那麼它將如何工作? – 2011-12-28 09:29:25

+0

@DotNetIsMyPower你需要關聯它們。如同這些字段已經可用那樣指定這種關聯。 Table2.Prop = Table1.Prop;等 – scartag 2011-12-28 09:33:51

+0

但他們在不同的模型。儘管讓我試試。快速回復 – 2011-12-28 09:37:19