首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF Transactions MSDTC?

EF Transactions MSDTC?
EN

Stack Overflow用户
提问于 2011-08-26 22:58:08
回答 2查看 400关注 0票数 1

我遇到了EF和事务处理方面的问题。

我正在尝试这样做:

代码语言:javascript
复制
using(TransactionScope scope = new TransactionScope())
{
  using(MyEntities model = new MyEntities())
  {
    MyT thing = new MyT{ Value1 = "bla", Value2 = "bla2", Value3 = "foo" };
    model.MyT.AddObject(thing);
    model.SaveChanges();

    thing.Value4 = Service.Call("bar");

    // this call causes an exception in MSDTC
    model.SaveChanges();

    scope.Complete();
  }
}

我这样做的原因是因为我想插入到数据库中,这样当我进行调用时,MyT具有我传递给服务的唯一id,然后我从描述在调用期间发生的事情的服务中得到唯一的引用和状态,然后我需要将其附加到记录中。

我的理解是,在单个事务期间,您只能更新一次记录/进行一次插入调用,但您不能同时执行这两项操作,因为由于某些原因,这会产生问题……我曾经有一篇MSDN文章,解释了为什么不能这样做的一些逻辑原因(可能是与锁相关的)。

所以我的问题是如何避免这一点,但确保在这些调用中的任何一个失败的情况下,我仍然可以回滚。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-27 05:01:03

尝试使用事务选项创建事务作用域。在事务选项中指定ReadUncommitted。

http://msdn.microsoft.com/en-us/library/system.transactions.isolationlevel.aspx

http://msdn.microsoft.com/en-us/library/ms149853.aspx

票数 0
EN

Stack Overflow用户

发布于 2011-08-26 23:55:08

当您在事务范围内与数据库建立多个连接时,事务将从本地事务提升为分布式事务,除非您显式地使用与数据库的相同连接。

当事务被提升时,它需要MSDTC服务来管理事务,因此如果此服务不可用,它将抛出异常。

如下所示:

代码语言:javascript
复制
using(TransactionScope scope = new TransactionScope())
{
  using(MyEntities model = new MyEntities())
  {
    model.Connection.Open();
    MyT thing = new MyT{ Value1 = "bla", Value2 = "bla2", Value3 = "foo" };
    model.MyT.AddObject(thing);
    model.SaveChanges();

    thing.Value4 = Service.Call("bar");

    // this call shouldn't cause anymore an exception in MSDTC
    model.SaveChanges();

    scope.Complete();
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7206651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档