是否可以拦截READ动作?

用户名

在Entity Framework Core中,您可以基于和的不同状态覆盖SaveChangesSaveChangesAsync中的/方法,DbContext例如:EntityState.AddedEntityState.ModifiedEntityState.Deleted,您可以创建一些有关何时,何人创建,修改或删除某些记录的审核解决方案。您可以在操作之前和之后保存实体的状态。一切都很好,这里完​​美!

我们可以对读取/查询/选择/查看操作执行类似的操作吗?

斯蒂芬·巴兰(Stefan Balan)

我挖了一点,发现的实际执行IQueryable是由完成的EntityQueryProvider : IAsyncQueryProvider, IQueryProvider

所以...您覆盖默认值EntityQueryProvider以进行日志记录:

   public class LoggingQueryProvider : EntityQueryProvider
    {
        public LoggingQueryProvider(IQueryCompiler queryCompiler) : base(queryCompiler) { }

        public override object Execute(Expression expression)
        {
            var result = base.Execute(expression);
            //log
            return result;
        }
        public override TResult Execute<TResult>(Expression expression)
        {
            var result = base.Execute<TResult>(expression);
            //log
            return result;
        }
        public override IAsyncEnumerable<TResult> ExecuteAsync<TResult>(Expression expression)
        {
            var result = base.ExecuteAsync<TResult>(expression);
            //log
            return result;
        }
        public override Task<TResult> ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
        {
            var result = base.ExecuteAsync<TResult>(expression, cancellationToken);
            //log
            return result;
        }
    }

并且您在配置DbContext时注册它 StartUp.ConfigureServices(IServiceCollection services)

    services.AddDbContext<XPContext>(builder =>
        builder
        .UseSqlServer(Configuration["TryDBConnectionString"])
        .ReplaceService<IAsyncQueryProvider, LoggingQueryProvider>()
    );

这不是很简单,但是您应该能够从表达式中获取一些信息,例如实体类型,并且显然可以访问实际结果。对于异步方法来说,事情看起来有些复杂,但是...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以拦截某个动作,使其成为ContentResult?

是否可以拦截和读取Firebase数据?

是否可以在promise的THEN构造内调度动作?

是否可以从组件函数调用动作?

Vuex,是否可以嵌套突变/动作?

在 Erlang 中是否可以有持续的动作?

广告拦截器是否可以在PWA上使用?

是否可以使用ByteBuddy拦截数组构造函数?

是否可以拦截没有AroundTimeout注释的超时方法?

是否可以在收到请求正文之前拦截请求

是否可以拦截 Nest.js 中的提供者?

是否可以在html5视频中嵌入动作?

是否可以在线执行动作事件?

是否可以计算方法内部的动作数?

是否可以根据日期和时间调用动作?

udev是否可以仅在挂载时触发动作?

Github动作:是否可以对从特定分支机构打开的拉取请求运行动作?

NGXS-动作拦截器

Android 是否可以创建服务覆盖并拦截所有触摸事件数据?

是否可以在Android(中午root)中拦截对联系人列表的访问?

AngularJS 1.3.13-是否可以在特定的$ resource中添加多个拦截器?

是否可以在浏览器中拦截第三方 POST 请求?

使用ByteBuddy中的@ Advice.AllArguments是否可以拦截没有参数的方法?

是否可以在Angular 5中注册多个拦截器?

是否可以在“设置”->“ iCloud”->“文档和数据”中拦截iCloud的打开/关闭?

是否可以使用ES2016代理来拦截“ typeof”操作?

是否可以从EF版本低于6的EF拦截对EF数据库的查询?

是否可以在评估功能的清除块之前拦截Spock功能的执行?

是否可以“拦截”复制/剪切/粘贴操作并将其替换为我自己的代码?