加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – ADO实体框架是否支持非DTC交易?一个EntityContext和一个T

发布时间:2020-12-15 23:54:07 所属栏目:百科 来源:网络整理
导读:我有一个使用实体框架的Web应用程序 – 我们使用TransactionScope类来提供环境事务. 有没有办法告诉EF使用标准T-SQL事务优先于DTC事务?我们经常在一个EntityContext和一个TransactionScope实例中对不同的表进行大量查询,但是这似乎总是将事务提升到DTC 我举
我有一个使用实体框架的Web应用程序 – 我们使用TransactionScope类来提供环境事务.

有没有办法告诉EF使用标准T-SQL事务优先于DTC事务?我们经常在一个EntityContext和一个TransactionScope实例中对不同的表进行大量查询,但是这似乎总是将事务提升到DTC

我举了一个简短的例子,见下文.对单个表的查询正确地启动了T-SQL事务,并且在连接SPID 54上
然后对ContactUs表进行查询,并且EF在不同的连接(SPID 53)上执行此操作,该连接具有将事务提升到DTC事务的效果.**

using (MyEntities DB = new MyEntities())
{
    using (TransactionScope t = new TransactionScope())
    {
        DB.Individual.First().EmailAddress = "bob" + DateTime.Now.Second.ToString() + "@bob.com"; // done on connection 54
        DB.ContactUs.First(); // done on connection 53 thus promoting the transaction!!
        DB.SaveChanges();
        t.Complete();
    }
}

解决方法

>在连接字符串上设置Enlist = false以避免在事务上自动登记.
>手动登记连接作为事务范围的参与者. (http://msdn.microsoft.com/en-us/library/ms172153%28v=VS.80%29.aspx)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读