我有这样的代码:是否有任何理由使用ObjectContext事务处理与DbContext的SaveChanges?
public abstract class DataContextBase
{
public DbContext DbContext { get; protected internal set; }
public ObjectContext ObjectContext { get; protected internal set; }
protected DbTransaction transaction;
protected void SetContext(DbContext db, ObjectContext oc)
{
DbContext = db;
ObjectContext = oc;
}
public void BeginTransaction()
{
if (ObjectContext.Connection.State != System.Data.ConnectionState.Open)
{
ObjectContext.Connection.Open();
}
transaction = ObjectContext.Connection.BeginTransaction();
}
public void CommitTransaction()
{
try
{
transaction.Commit();
}
finally
{
transaction = null;
ObjectContext.Connection.Close();
}
}
public void RollbackTransaction()
{
try
{
transaction.Rollback();
}
finally
{
transaction = null;
ObjectContext.Connection.Close();
}
}
public void Save()
{
DbContext.SaveChanges();
}
}
它是从一个示例应用程序,我用这个作为一个基类我的应用程序的主数据上下文的。我正在使用实体框架5,而且我刚刚读到,当我调用DbContext的SaveChanges方法时,它总是在数据库事务中运行,并且在事务必须回滚时会引发异常,在这种情况下,更改不会保存到数据库中。
但在示例应用程序中,几乎每个服务方法都以DataContextBase.BeginTransaction调用开始,并以DataContextBase.CommitTransaction调用结束(在例外情况下以DataContextBase.RollbackTransaction结束),即使调用了DataContextBase.Save(它调用DbContext.SaveChanges())。
看起来好像有一个额外的事务包装了DbContext.SaveChanges调用的内置事务。
难道有任何需要这笔额外交易的情况吗?
注:DataContextBase的ObjectContext的是来自的DbContext一招:
((IObjectContextAdapter)this).ObjectContext; // inside the DbContext class