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

时间:2010-10-23 20:40:26

标签: c# .net entity-framework

        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。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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