假如我是在同一時間將在下面的表中的記錄現在
表1
表2
表3
表4
表5如何在LINQ的maintan交易的entites
我想要做的是,在情況的任何異常或錯誤的插入在表3中發生,然後記錄它之前被插入(例如,在表1和表2)必須是回滾...
如何一世像這樣管理交易?
假如我是在同一時間將在下面的表中的記錄現在
表1
表2
表3
表4
表5如何在LINQ的maintan交易的entites
我想要做的是,在情況的任何異常或錯誤的插入在表3中發生,然後記錄它之前被插入(例如,在表1和表2)必須是回滾...
如何一世像這樣管理交易?
默認情況下,調用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();
}
這是實體框架4
默認行爲,該交易隱含..只要你撥打的SaveChanges任何錯誤都將觸發回滾。
能否手動處理它?實際上Table1的PrimaryKey是Table2的ForeignKey,Table2的PK是Table3的FK,等等......那麼它將如何工作? – 2011-12-28 09:29:25
@DotNetIsMyPower你需要關聯它們。如同這些字段已經可用那樣指定這種關聯。 Table2.Prop = Table1.Prop;等 – scartag 2011-12-28 09:33:51
但他們在不同的模型。儘管讓我試試。快速回復 – 2011-12-28 09:37:19
燁@scartag感謝好友得到了我的答案,謝謝:) – 2011-12-28 09:49:19