【转】在使用实体框架(Entity Framework)的应用中加入审计信息(Audit trail)跟踪数据的变动
在一些比较重要的业务系统中,通常会要求系统跟踪数据记录的变动情况。系统要记录什么时间,什么人,对那些信息进行了变动。
比较简单的实现方式是在每个表中加入两个字段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
相关文章
- 利器| Cypress 强大全新的 Web UI 测试框架应用尝鲜
- 【数据】开发iOS应用,不得不看的数据和教训
- 麻省理工设计出可以快速生产和应用的可编程RNA疫苗
- Springboot: ApplicationRunner、CommandLineRunner的应用场景、区别及使用示例
- 在Spring框架中实现属性配置动态刷新,不需要重启应用。
- 精读JavaScript模式(六),Memoization模式与函数柯里化的应用
- 【Harmony OS】【FAQ】鸿蒙应用开发问题分享(字体/构造器)
- v-html的应用
- 《Android 应用案例开发大全(第二版)》——2.1节案例背景及功能概述
- 《Android 应用案例开发大全(第3版)》——第2.3节壁纸的基本框架
- 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
- macOS SwiftUI 应用架构之全屏模式 02 在需要完成任务时使工具栏保持可见
- 开发平台 = 基础设施 + 应用框架 + 运行机制(原理)
- Django-Web框架之创建项目和应用
- C++反射机制:可变参数模板实现C++反射(使用C++11的新特性--可变模版参数,只根据类的名字(字符串)创建类的实例。在Nebula高性能网络框架中大量应用)
- SqlServer索引的原理与应用
- Flutter:创建透明/半透明的应用栏
- 一招快速实现自定义快应用titlebar
- Poj 4227 反正切函数的应用
- Unity PureMVC 之 PureMVC 框架的下载,以及一个简单应用学会使用 PureMVC 框架
- Unity Android 之 应用签名发布 Publishing Settings 中创建和自定义 keystore 的简单方法(内附说明和操作步骤)
- 应用Tableau、Vertica的可视化大数据分析框架
- 记录python接口自动化测试--unittest框架基本应用(第二目)