在插入命令之前在 Entity Framework Core 拦截器上获取对象

pej*_*man 6 orm entity-framework-core

出于某种原因,我想在插入对象之前获取对象Ef Core Intreceptor,例如在我想要的时候

  var newOrder = new Order { CustomerID = 3, EmployeeID = 4, OrderDate = DateTime.Now };
        _myContext.Orders.Add(newOrder);
        _myContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我尝试newOrder使用ReaderExecuting方法,Interceptor所以我覆盖了这个方法:

   public override InterceptionResult<DbDataReader> ReaderExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result)
    {
        return base.ReaderExecuting(command, eventData, result);
    }
Run Code Online (Sandbox Code Playgroud)

这个方法被调用了,那么我怎样才能newOrder使用上面的方法呢?

我知道NHibernate我们可以这样做:

 public bool OnPreInsert(PreInsertEvent @event)
    {

        //some other codes
    }
Run Code Online (Sandbox Code Playgroud)

我可以通过 获取对象@event.Entity,但是Ef Core 3有什么办法可以这样做吗?

Mon*_*ndQ 0

我知道我参加聚会迟到了,但以防万一有人来这里寻找这个问题的答案。

Microsoft 在 EF core 7 中添加了一堆新的、实际上有用的拦截器,尽管它的名称是在 .NET 6 上运行的。

我认为 EF core 7 之前的拦截器用处不大。

https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.diagnostics.iinterceptor?view=efcore-7.0

只需展开“派生”部分,它就会向您显示可用拦截器的列表。

如果您想在将实体保存到数据库之前对其进行编辑,您可以使用SaveChangesInterceptor. 只需创建一个继承它的类并重写该SavingChanges方法即可。

https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.diagnostics.savechangesinterceptor?view=efcore-7.0