如何在EF 6中添加物理化拦截器

时间:2017-11-15 15:08:42

标签: entity-framework interceptor

前段时间我设法将一个自定义拦截器添加到EF 6.1的私有分支中,该分支在执行延迟加载的DB-Hit之前和之后被调用,如下所示:

public interface IDbLazyLoadInterceptor : IDbInterceptor
{
    void LazyLoadablePropertyGetterCalled<TItem>(DbLazyLoadInterceptionContext<TItem> interceptionContext) where TItem : class;
    void PropertyIsGettingLazyLoaded<TItem>(DbLazyLoadInterceptionContext<TItem> interceptionContext) where TItem : class;
    void PropertyHasBeenLazyLoaded<TItem>(DbLazyLoadInterceptionContext<TItem> interceptionContext) where TItem : class;
}

现在我有了新的要求。我需要创建一个拦截器,在执行实体的实现之前和之后就被EF调用。问题:我希望能够将其与DB Hits相关联(调用IDbCommandInterceptor的内容)。

我需要帮助从哪里开始。

我以为我可以在Shaper中添加拦截器调度调用,例如在调用public bool MoveNext()public async Task<bool> MoveNextAsync(CancellationToken cancellationToken)之前和之后的_shaper.StartMaterializingElement();_shaper.StopMaterializingElement();方法中。我想这可行,对吗?

但是我怎样才能将此与馈送到IDbCommandInterceptor的Db命令相关联?是否有某种方法可以获得由Shaper使用的Reader运行的Command(查询?)?

并且:我错过了我需要添加拦截器调用的其他位置吗?

谢谢,欢呼, 添

0 个答案:

没有答案