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