在一些比较重要的业务系统中,通常会要求系统跟踪数据记录的变动情况。系统要记录什么时间,什么人,对那些信息进行了变动。

比较简单的实现方式是在每个表中加入两个字段CreatedBy和CreatedAt,见图1。CreatedBy用来存是谁进行了这次更改。CreatedAt用来存什么时间进行了这次更改。但是这种方式只能保存最后一次进行改动的人和时间。中间的改动历史都不能保留。改动前的值也不能保留。

图 1

对于关键的信息系统,例如银行系统,电商系统,公安系统,我们需要保存数据完整的变动信息和历史。这通常包括进行变更的人,变更发生的时间,所有变更前的数据值,变更后的数据值。

在使用实体框架(Entity Framew)的应用中,可以很方便的实现加入审计信息(Audit trail)跟踪数据的变动的功能。我们在这里给大家做一个简要的介绍。

0. 前提是你使用的实体框架是 code-first.

1. 使用Nuget安装Tracker Enabled Dbcontext。如果你没有使用Microsoft.AspNet.Identity;你可以安装TrackerEnabledDbContext。如果你使用了Microsoft.AspNet.Identity;你需要安装TrackerEnabledDbContext.Identity. 见图2.

                  图2

2. 修改你的DBcontext。如果你使用了Microsoft.AspNet.Identity。那么你的DBContext要继承TrackerIdentityContext<ApplicationUser>,否则你需要继承TrackerContext。见图3.

                图 3

3. 修改你的数据层操作方法和业务层的方法。要增加userId的参数把userId的信息传递过来。见图4.修改context.SaveChanges();为context.SaveChanges(userId); userId为更改用户的Id信息。

            图 4.

4. 更新数据库。运行Enable-Migrations -Force。再更新数据库运行 Update-Database。详细步骤,如果不是很清楚,可以自行网上查询。

更新完数据库后,你会发现里边增加了两个新表。一个是AuditLogs。另一个是AuditLogDetails。见 图5.

    图 5.

5. 我们做一个员工维护的Demo来验证它的功能。在这个Demo中包括 “增加员工信息”和“更新员工信息”两个功能。见图6.

              图 6.

新增加的员工是 10010。

更新的员工是1009。我们将他的employee code 从1006变成1009. Employee Name从周伯通1变成了周伯通。

6. 完成上述操作后。我们查看AuditLogs和AuditLogDetails表。里边已经增加了相关的变动信息。 见图7和图8.

  1) AuditLogs表

          图 7

  2. AuditLogDetails表

7. 源代码下载

  a) 源代码下载

  b) 数据库下载

谢谢大家。欢迎指正和讨论!

在使用实体框架(Entity Framework)的应用中加入审计信息(Audit trail)跟踪数据的变动的更多相关文章

  1. C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名

    转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就 ...

  2. 实体框架(Entity Framework)快速入门--实例篇

    在上一篇 <实体框架(Entity Framework)快速入门> 中我们简单了解的EF的定义和大体的情况,我们通过一步一步的做一个简单的实际例子来让大家对EF使用有个简单印象,看操作步骤 ...

  3. 实体框架(Entity Framework)快速入门

    实体 框架 (Entity Framework )简介 实体框架Entity Framework 是 ADO .NET 中的一组支持 开发 面向数据的软件应用程序的技术.是微软的一个ORM框架. OR ...

  4. ADO.NET实体框架Entity Framework模型-基于元数据解析

           上一篇简单介绍了EF的XML模型结构,在基于xml解析一文中,主要使用xml查询技术Xpath,XQuery来得到实体模型中相应信息的,由于这种方式在数据库庞大,表关系复杂的情况下,有诸 ...

  5. 实体框架Entity Framework 4.1快速入门

    介 绍 在旧的Entity 框架中,开发者可以从已存在的数据库中产生业务实体的模型,这种开发方法被称为数据库驱动的开发方法.而在4.1的Entity Framework中,支开发者先创建实体业务类,然 ...

  6. ADO.NET实体框架Entity Framework模型-基于XML解析

            最近由于项目需求,需要对实体框架内表之间的关系进行处理,主要功能要求是通过一表名,返回其在实体框架内的所有关系表.主外键及每个字段的属性.先简单描述我解决这个问题从开始到最后的分析实现 ...

  7. 实体框架—Entity Framework

    简称EF,是微软以ADO.NET为基础所发展出来的对象关系对应(ORM)解决方案. EF就是用来处理数据的,与数据库打交道.但是底层还是用到了ADO.NET的那一套东西. 为什么叫对象关系对应解决方案 ...

  8. 【转】在使用实体框架(Entity Framework)的应用中加入审计信息(Audit trail)跟踪数据的变动

    在一些比较重要的业务系统中,通常会要求系统跟踪数据记录的变动情况.系统要记录什么时间,什么人,对那些信息进行了变动. 比较简单的实现方式是在每个表中加入两个字段CreatedBy和CreatedAt, ...

  9. ORM框架Entity Framework

    博客园在推广ORM方面的确做了很大的贡献,很多的程序员开始使用ORM,不用写SQL的喜悦让他们激动不已,可是好景不长,他们很快发现众多的烦恼一个接一个的出现了. 很遗憾,我并不打算在这篇文章中解决这些 ...

随机推荐

  1. 《程序设计基础》实验题目2 c文件读取(反序列化?) 链表排序

    题目: 每个学生的信息卡片包括学号.姓名和成绩三项.定义存储学生信息的单向链表的结点类型:编写函 数,由文件依次读入 n(n≥0)个学生的信息,创建一个用于管理学生信息的单向链表:编写函数,对 该链表 ...

  2. 【模板】Tarjan缩点

    洛谷3387 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...

  3. 【codeforces 767C】Garland

    [题目链接]:http://codeforces.com/contest/767/problem/C [题意] 一棵树; 树上的每个节点都有一个权值; 让你把一棵树切掉两条边; 然后把这棵树分成了3个 ...

  4. hdu_1863_畅通工程_201403122000

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. nyoj_782_星期几?_201312071940

    星期几? 时间限制:500 ms  |           内存限制:65535 KB 难度:2   描述                      Acmer 小鱼儿 埋头ku算一道题 条件:已知给 ...

  6. 1393 0和1相等串 51nod

    1393 0和1相等串 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等. I ...

  7. Spring MVC-集成(Integration)-生成PDF示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_pdf.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如何 ...

  8. Linux环境变量设置命令export(转)

    Linux export命令用于设置或显示环境变量. 在shell中执行程序时,shell会提供一组环境变量.export可新增,修改或删除环境变量,供后续执行的程序使用.export的效力仅及于该次 ...

  9. The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path

    完整错误信息: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"AS IS" AND ANY ...

  10. 【Anroid界面实现】WindowManager类使用具体解释——用户首次打开APP的使用教学蒙板效果实现

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在上一篇的文章中,我们介绍了怎样实现桌面悬浮窗体,在这个效果的实现过程中.最重要的一个类就是WindowMa ...