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。
答案 0 :(得分:0)
如果将TransactionScope与多个ObjectContext实例一起使用,则事务将被提升为分布式,并且整个操作(SomeMethod)仍将作为原子处理。但分布式事务需要额外的NT服务及其依赖。该服务称为Microsoft分布式事务处理协调器(MSDTC)。此服务必须在所有涉及的服务器(应用程序服务器和数据库服务器)上运行。在网络方案服务中,需要一些其他配置。对于通信,必须在防火墙中打开RPC端口。
答案 1 :(得分:0)
最终,数据库不了解数据上下文,因此很简单:适用交易规则。作为可序列化的事务,将发布和遵守诸如读锁和键范围锁之类的事务。与往常一样,死锁存在复杂的风险,但最终应该有效。请注意,所涉及的所有上下文都应按要求登记。