• 2.EF的数据审计日志


    转载:采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    数据审计日志:

    先说一下这个审计的概念,就是对所有的实体的操作(增,删,改)进行监控.

    我们先来看一下效果.

    这是他追踪到的信息,我们可以很方便的把这些信息存入数据库或者你的日志存储里(文本,XML,缓存)都行 随你.

    下面我们开始讲解用法:

    首先我们可以在应用程序的入口( Application_Start)配置(我这里以MVC的Web应用来举例):

    这里的配置可不加,用默认的也行,当然有需要的可以参考

    https://github.com/loresoft/EntityFramework.Extended/wiki/Audit-Log

    这里有更详细的配置介绍

    复制代码
      protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                //这里是审计日志的配置
                var auditConfiguration = AuditConfiguration.Default;
                auditConfiguration.IncludeRelationships = true;
                auditConfiguration.LoadRelationships = false;
                auditConfiguration.DefaultAuditable = true;
               
            }
    复制代码

    下面我们开始直接用,

    举个栗子:

    复制代码
                    using (StudentInfoEntities us = new StudentInfoEntities())
                    {
                        //开启日志
                        var logaudit = us.BeginAudit();
                       //进行增删改操作
                        us.LogData.Add(new LogData() { EntityKey = "aa", EntityName = "asd", Name = "asd" });
                        var data = us.LogData.Where(a => a.Id == 15).FirstOrDefault();
                        data.Name = "Test";
                        var delete = us.LogData.Where(a => a.Id == 9).FirstOrDefault();
                        us.LogData.Remove(delete);
                        //正常保存
                        us.SaveChanges();
                       //获取审计日志
                        var log = logaudit.LastLog;
                        //将日志转为XML字符串,或存入XML文件
                        string dda = log.ToXml();
                    }
    复制代码

    最终结果如下:

    可以看到我们很方便的监控到了我们刚刚进行的三次操作.

    (重要提示:这里需要注意的是,这里的审计日志只能监控到常规的写法的增删改,对于上面的批量增删改很诡异的是监控不到的,作为自己写的扩展库,自己却监控不到 - -,这不得不说是很蛋疼..)

    第四章:查询缓存

    代码如下:

    复制代码
    //使用默认的缓存时间
    var tasks = db.Tasks
        .Where(t => t.CompleteDate == null)
        .FromCache();
    
    //查询结果缓存300秒
    var tasks = db.Tasks
        .Where(t => t.AssignedId == myUserId && t.CompleteDate == null)
        .FromCache(CachePolicy.WithDurationExpiration(TimeSpan.FromSeconds(300)));
    复制代码

    这个我用的不多,就不详细的赘述了,有兴趣的朋友可以自行查看

    https://github.com/loresoft/EntityFramework.Extended/wiki/Query-Result-Cache

    写在最后

    文章到此就结束了,写文章的过程也是自己温故而知新的过程.写的不好希望大神多多指正,我很希望能起到抛砖引玉的效果,上篇文章就得到了很多好的建议,希望大家不啬赐教.

    作者:顾振印 出处:http://www.cnblogs.com/GuZhenYin/ 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面
  • 相关阅读:
    Android AlertDialog警告对话框实现
    Android状态栏通知Status Bar Notification
    Android spinner控件的实现
    Winform之UI后台线程
    Winform之自定义控件
    WebForm原理,aspx服务器端与客户端源码比较
    IHttpModule之闲扯
    [算法]方正面试题:N×N矩阵螺旋打印输出
    DOTA版设计模式——工厂方法
    Window服务
  • 原文地址:https://www.cnblogs.com/jameslif/p/6867549.html
Copyright © 2020-2023  润新知