我想了解如何让我的项目与交易配合工作。我使用 EntityFramework 4 和 Oracle 11g 数据库。
这里的问题是,我要做很多操作,而当出现意外异常时,我想回滚。我有多个类具有简单的操作,每个类创建自己的上下文并进行一些更改,例如:
public class OneDaoFactory
{
public int AddTreatment(Dto dto)
{
using (Context bdd = new Context())
{
//Make some changes in database
bdd.SaveChanges();
}
}
}
现在我有一个业务,将调用工厂中的方法:
public void Business()
{
try
{
OneDaoFactory.AddTreatment(dto);
SecondDaoFactory.Add(dto2);
throw new Exception("make a rollback");
}
catch(Exception ex)
{
//rollback
}
}
有没有办法在业务中创建一个事务,以管理工厂创建的所有上下文?除了在业务中创建一个Context并将其传递给所有DaoFactories之外?我发现了有关TransactionScope的东西,但是从我看到的来看,它只用于SqlServer。我尝试手动打开连接和事务,但上下文似乎重新打开自己,所以我的回滚无效。如果可能,我希望在业务中不包含对EF的引用。像使用另一个工厂来打开和关闭事务。