2013-02-18 48 views
3

有一个答案here来解释如何使用Entity Framework执行交易 但是,该解决方案不适用于代码优先。 我已经尝试和我的测试表明下面没有工作使用Entity Framework进行交易代码优先

using (var scope = new TransactionScope()) 
{ 
     DBContext1.SaveChanges() 
     If (ForceFailure) return 0 // used in testing 
     DBContext2.SaveChanges() 
     scope.Complete(); 
} 

但是我觉得紧张,因为我不再传递参数的SaveChanges或致电AcceptAllChanges

如何建立自己是否可以信任我的解决方案?

+0

你不相信什么方面(数据库一致性,上下文一致性等)? – 2013-02-18 20:37:03

+0

我想知道这两个savechanges运行或者都不运行。我的测试表明情况就是这样。但是,因为代码与早期的EF版本看起来有很大不同,所以我正在寻找一些同行或文档验证。 – 2013-02-18 20:50:05

回答

2

SaveChanges(Boolean)ObjectContext的一部分,而不是DbContext。请注意,方法SaveChanges(Boolean) in ObjectContext已被弃用,用于支持SaveChanges(SaveOptions)

如果您仍想使用DbContext,则可以使用例如扩展方法将其自己的SaveChanges方法超载以使用IObjectContextAdapter.ObjectContext

+1

DbContext确实有一个SaveChanges方法 – 2013-04-11 00:28:49

+0

它确实存在,但它不是相同的方法('DbContext'不扩展ObjectContext'),这就是为什么它缺少你需要的参数。但是,您可以通过'DbContext'实现的'IObjectContextAdapter'接口检索'DbContext'内部使用的'ObjectContext'的引用,并使用您需要的'SaveChanges'方法。 – tne 2013-04-11 07:33:34

+0

你能告诉我你在哪里发现DBContext SaveChanges已被弃用?我发现它是相反的 - 但不是来自微软。 – 2013-04-11 09:57:28

相关问题