CSharp-Single-EFCore/Bunny.Common/Interceptor/TransactionInterceptor.cs

30 lines
989 B
C#
Raw Normal View History

using Bunny.Common.Exception;
using Bunny.Dao.Model.Constant;
using Microsoft.EntityFrameworkCore.Diagnostics;
namespace Bunny.Common.Interceptor;
public class TransactionInterceptor : SaveChangesInterceptor
{
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;
}
}