34 lines
1.1 KiB
C#
34 lines
1.1 KiB
C#
using Bunny.Common.Exception;
|
|
using Bunny.Dao.Common.Constant;
|
|
using Microsoft.EntityFrameworkCore.Diagnostics;
|
|
|
|
namespace Bunny.Common.Context.Database;
|
|
|
|
public class TransactionInterceptor : SaveChangesInterceptor
|
|
{
|
|
// 重写 SavingChanges 方法
|
|
public override InterceptionResult<int> SavingChanges(DbContextEventData eventData, InterceptionResult<int> result)
|
|
{
|
|
// 如果当前上下文存在事务,则直接返回结果
|
|
if (eventData.Context!.Database.CurrentTransaction != null) return result;
|
|
|
|
// 开始数据库事务
|
|
using var transaction = eventData.Context.Database.BeginTransaction();
|
|
try
|
|
{
|
|
// 调用基类方法继续保存更改
|
|
result = base.SavingChanges(eventData, result);
|
|
|
|
// 如果保存更改成功,则提交事务
|
|
transaction.Commit();
|
|
}
|
|
catch (System.Exception)
|
|
{
|
|
// 如果保存更改失败,则回滚事务并抛出自定义异常
|
|
transaction.Rollback();
|
|
throw new BunnyException(ExceptionConstant.DataBaseError);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
} |