public class EFTransaction:ITransaction
{
DbContextTransaction originalTransaction =
null;
MyDbContext myDbContext =
null;
/// <summary>
/// 默认构造函数
/// </summary>
public EFTransaction()
{
myDbContext=
DbContextHelper.MainDbContextFactory.GetDbContext(AccessMode.Write);
originalTransaction =
myDbContext.Database.CurrentTransaction;
}
/// <summary>
/// 构造函数
/// </summary>
public EFTransaction(IDbContextFactory factory)
{
myDbContext=
factory.GetDbContext(AccessMode.Write);
originalTransaction =
myDbContext.Database.CurrentTransaction;
}
/// <summary>
/// 开始事务
/// </summary>
public void BeginTransaction()
{
MyDbContext dbContext =
myDbContext;
if (originalTransaction ==
null)
{
dbContext.Database.BeginTransaction();
}
ThreadTransaction.SetTransactionFlag(true);
}
/// <summary>
/// 提交一个事务
/// </summary>
/// <returns></returns>
public int Commit()
{
int result =
0;
if (originalTransaction ==
null)
{
result +=
myDbContext.SaveChanges();
ThreadTransaction.SetTransactionFlag(false);
DbContextTransaction transaction =
myDbContext.Database.CurrentTransaction;
if (transaction !=
null)
{
transaction.Commit();
transaction.Dispose();
result +=
1;
}
}
return result;
}
/// <summary>
/// 回滚一个事务
/// </summary>
public void Rollback()
{
if (originalTransaction ==
null)
{
ThreadTransaction.SetTransactionFlag(false);
DbContextTransaction transaction =
myDbContext.Database.CurrentTransaction;
if (transaction !=
null)
{
transaction.Rollback();
transaction.Dispose();
}
}
else
{
throw new Exception(
"嵌套内部事务异常");
}
}
}
支持嵌套事务
使用示例:
public static TResult AddTest0()
{
BookDAL testdal = DALFactory.CreateDAL<BookDAL>
();
Framework.DataAccess.EFTransaction Transaction =
new Framework.DataAccess.EFTransaction();
Transaction.BeginTransaction();
try
{
testdal.Insert(new Book { NAME=
"c#1234" });
Transaction.Commit();
}
catch (Exception ex)
{
Transaction.Rollback();
}
var ss=
testdal.GetList();
return null;
}
转载于:https://www.cnblogs.com/njcxwz/p/6497106.html
相关资源:EF增删改查封装基类
转载请注明原文地址: https://mac.8miu.com/read-61911.html