EF事务封装
2024-10-20 03:26:19
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 = ;
if (originalTransaction == null)
{
result += myDbContext.SaveChanges();
ThreadTransaction.SetTransactionFlag(false);
DbContextTransaction transaction = myDbContext.Database.CurrentTransaction;
if (transaction != null)
{
transaction.Commit();
transaction.Dispose();
result += ;
} }
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;
}
最新文章
- DES &; 3DES 加密算法
- apache安全配置---禁止访问特定文件,防止日志、压缩包被下载
- 使用git从服务器下载已存在的项目文件
- Ecshop :后台添加新功能 菜单及 管理权限 配置
- DevExtreme官方视频教程分享
- Java数据结构——有序链表
- 细说Debug和Release区别
- 实战-Mysql主从复制
- 解决 PclZip 中文乱码问题
- java与数据库
- maven插件本地化安装
- 学习python的第四天
- Json,Gson,Ajax基础知识
- DbGridEh根据某一个字段的值显示对应底色或字体变化
- centos7生产环境下openssh升级
- TaskAsyncHelper
- redis缓存穿透解决办法--排它锁
- unity小地图上的动态图标
- Laravel中创建控制器
- ACM,我回来了!