为了比较方便的实现自己需要的 Interceptor,微软还提供了一个 SaveChangesInterceptor 抽象类,这样只需要继承于这个类,重写自己需要的方法即可,实现比较简单,就是实现了 ISaveChangesInterceptor 接口,然后接口的实现基本都是空的虚方法,根据需要重写即可 源码链接:https://github.com/dotnet/efcore/blob/v5.0.0/src/EF...
Entity Framework Core (EF Core) 侦听器支持 EF Core 操作的侦听、修改和/或抑制。 这包括低级数据库操作(例如执行命令)以及高级别操作(例如对 SaveChanges 的调用)。 侦听器与日志记录和诊断的不同之处在于,它们允许修改或抑制所侦听的操作。简单日志记录或Microsoft.Extensions.Logging是日志记录的更好选择。
之前EF Core 5 还没正式发布的时候有发布过一篇关于 SaveChangesEvents 的文章,有需要看可以移步到 efcore 新特性 SaveChanges Events,在后面的版本中又加入了 Interceptor 的支持,可以更方便的实现 SaveChanges 事件的复用, 今天主要介绍一下通过 SaveChangesInterceptor 来实现日志审计...
为了实现自动更新,我们需要创建一个 SaveChangesInterceptor 实现如下: filesealedclassSavingInterceptor:SaveChangesInterceptor { publicoverrideInterceptionResult<int>SavingChanges(DbContextEventDataeventData,InterceptionResult<int>result) { ArgumentNullException.ThrowIfNull(eventData.Context); BeforeSaveChanges(eventData.Con...
为了实现自动更新,我们需要创建一个SaveChangesInterceptor实现如下: filesealedclassSavingInterceptor:SaveChangesInterceptor{publicoverrideInterceptionResult<int>SavingChanges(DbContextEventDataeventData,InterceptionResult<int>result){ArgumentNullException.ThrowIfNull(eventData.Context);BeforeSaveChanges(eventData.Context);retur...
這比 EF Core 6.0 快四倍,視應用程式與資料庫之間的延遲等環境因素而定。觸發程序如果數據表有觸發程式,則上述程式代碼中的呼叫 SaveChanges 會擲回例外狀況:未處理的例外狀況。 Microsoft.EntityFrameworkCore.DbUpdateException: 無法儲存變更,因為目標數據表具有資料庫觸發程式。 請據以設定實體類型,如需詳細資訊,...
首先我们实现一个SoftDeleteInteceptor, 继承于SaveChangesInterceptor通过override更新之前的方法SavingChanges/SavingChangesAsync 在更新之前看一下被删除的对象是不是要软删除的,如果要软删除则将对象的IsDeleted设置为true并将状态改成Modified,以此来实现软删除的效果 ...
namespaceMicrosoft.EntityFrameworkCore.Diagnostics { /// ///<para> ///Abstract base class for <seecref="ISaveChangesInterceptor"/> for use when implementing a subset ///of the interface methods. ///</para> /// publicabstractclassSaveChanges...
}returnbase.SaveChangesAsync(cancellationToken); } 获取Entry 资料, 然后修改 Entry 就可以操控最终 save 的结构了. (比如把 Deleted 换成 Modified) 创建一个 Interceptor (我这里用 SaveChangesInterceptor 举例) publicclassSoftDeleteInterception : SaveChangesInterceptor ...
基于 EF Core 中的 Interceptor 实现软删除功能,是通过在更新之前检查实体是否需要执行软删除操作,进而修改实体的状态而非从数据库中直接删除,实现数据的逻辑删除。首先,我们定义了一个接口 ISoftDeleteEntityWithDeleted,用于标识需要进行软删除的实体。实现此接口的方式灵活多样,可以通过属性标记来区分。...