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/ 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面