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

比较简单的实现方式是在每个表中加入两个字段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) 数据库下载

转自:https://www.cnblogs.com/thinking-jiang/p/5610813.html

【转】在使用实体框架(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. 使用explain来分析SQL语句实现优化SQL语句

    用法:explain sql 作用:用于分析sql语句 mysql> explain select * from quser_1 where loginemail = "quctest ...

  2. 【Mysql】【环境配置】Mac

    参看:http://www.cnblogs.com/chenmo-xpw/p/6102933.html     一.下载dmg包安装 1.下载MySQL dmg 包, 从官网 : http://www ...

  3. 每日质量NPM包模态框_react-modal

    一.react-modal 官方定义: Accessible modal dialog component for React.JS 理解: 一个容易使用的React模态框组件 二.用法 有时候我们不 ...

  4. crontab 定时执行python脚本

    每天8点30分运行命令/tmp/run.sh * * * /tmp/run.sh 每两小时运行命令/tmp/run.sh */ * * * /tmp/run.sh

  5. 常见的Java面试题及答案整理

    1. 基础篇 1. 面向对象特征:封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在 Java 当中,有 3 种修饰符: p ...

  6. Wiener’s attack python

    题目如下: 在不分解n的前提下,求d. 给定: e = 140586954170153340715880103465867497905399132874997078029388987191993846 ...

  7. TextView显示内容不全

    今天开发遇到一个问题,发现TextView显示不全,很纳闷,看图: 正常情况应该是这个样子的: 造成这种情况的原因是: TextView被快速并且多次的设置内容值造成的. 我的场景: 我点击全选按钮, ...

  8. new int

    new int, 在申请内存,定义int变量:new int (100),在申请内存,定义int变量,并初始化为100:new int[100] , 在申请内存,定义int数组变量.

  9. MySQL学习(八)

    连接查询 1 集合的特点:无序性,唯一性 集合的运算:求并集,求交集,求笛卡尔积 表和集合的关系 一张表就是一个集合,每一行就是一个元素 疑问:集合不能重复,但我有可能两行数据完全一样 答:mysql ...

  10. 00-python-内置函数笔记

    01.enumerate()函数用于将一个可遍历的数据对象(如 列表.元组或字符串)组合为一个索引序列,同时列出数据和数据包下标,一般用在for循环中 for i, element in enumer ...