繁体   English   中英

关于实体框架和交易的问题

[英]Question about Entity Framework and Transactions

        public void SomeMethod1()
        {
            using (TemplateEntities ctx = new TemplateEntities())
            {
                //do something in this ctx
            }
        }

        public void SomeMethod2()
        {
            using (TemplateEntities ctx = new TemplateEntities())
            {
                //do something else in this ctx
            }
        }

        public void SomeMethod()
        {
            using (TemplateEntities ctx = new TemplateEntities())
            {
                using (TransactionScope tran = new TransactionScope())
                {
                    SomeMethod1();
                    SomeMethod2();
                    var itemToDelete= (from x in ctx.Xxx
                                    where x.Id==1
                                    select x).Single();
                    ctx.Xxx.DeleteObject(itemToDelete);
                    ctx.SaveChanges();
                    tran.Complete(); 
                }
            }
        }

SomeMethod中发生的事情即使有更多的上下文,也会在事务中执行? 我正在使用POCO。

如果将TransactionScope与多个ObjectContext实例一起使用,则事务将被提升为分布式,并且整个操作(SomeMethod)仍将作为原子进行处理。 但分布式事务需要额外的NT服务及其依赖。 该服务称为Microsoft分布式事务处理协调器(MSDTC)。 此服务必须在所有涉及的服务器(应用程序服务器和数据库服务器)上运行。 在网络方案服务中,需要一些其他配置。 对于通信,必须在防火墙中打开RPC端口。

最终,数据库不了解数据上下文,因此很简单:适用交易规则。 作为可序列化的事务,将发布和遵守诸如读锁和键范围锁之类的事务。 与往常一样,死锁存在复杂的风险,但最终应该有效。 请注意,所涉及的所有上下文都应按要求登记。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM