ObjectContext中的EF6事务错误

时间:2014-07-24 12:35:31

标签: c# asp.net transactions entity-framework-6

请有人帮助我尝试在EF6中使用Transaction。这是我在.net中第一次尝试交易。 我已经在他们的网站上阅读了Microsoft的手册。 http://msdn.microsoft.com/en-us/data/dn456843.aspx我会使用一个事务进行用户注册,但没有任何工作。我正在使用EF objectContext。 这是我的代码的一小部分:

using (var context= new MyModelContainer())
{ 
 using(var dbContextTransaction = context.Database.BeginTransaction())
      {
       try 
         {
          // code here to create user
          context.savechanges();
          // code here to add role
         context.savechanges();

         dbContextTransaction.Commit(); 
        }
      catch 
         {
         dbContextTransaction.Rollback(); 
         }
     }
}

我的问题是Visual Studio甚至不识别Database.BeginTransaction()。可能是因为我们正在使用objectContext?我从不使用交易。我改为使用另一个我们的模型为DbContext的数据库,它似乎有效。

我们如何将objectContext与事务一起使用(意味着不是分布式系统)? 请问任何教程?

我尝试了交易范围,但它似乎工作但我读到这是分布式系统(((这意味着性能下降。任何建议? 谢谢你的时间!!!

1 个答案:

答案 0 :(得分:1)

替换

using(var dbContextTransaction = context.Database.BeginTransaction())

用这个:

using(var dbContextTransaction = new TransactionScope())

并删除对Rollback的调用。 TransactionScore会做你需要的。

TransactionScope与分布式系统兼容,但如果您不调用其他数据库并按照描述使用它,那么它对您的需求来说已经足够好了。如果您尝试调用保存到另一个db(例如),那么它将需要特殊权限并且将抛出异常。