30 lines
989 B
C#
30 lines
989 B
C#
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;
|
|
}
|
|
} |