在插入命令之前,在实体框架核心拦截器上获取对象



由于某些原因,我想在对象插入Ef Core Intreceptor之前获取对象,例如,当我想要时

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

我试图在InterceptorReaderExecuting方法上获得newOrder,所以我覆盖了这个方法:

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

这个方法被调用了,那么我如何在上面的方法上获得newOrder呢?

我知道在NHibernate中,我们可以这样做:

public bool OnPreInsert(PreInsertEvent @event)
{
//some other codes
}

我可以通过@event.Entity获得对象,但在Ef Core 3中有这样的方法吗?

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

微软为EF core 7添加了一堆新的、实际上很有用的拦截器,尽管它的名字叫btw.,但它运行在.NET 6上

我认为EF核心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

最新更新