【发布时间】:2019-06-16 19:13:52
【问题描述】:
我有一个 EF 6 DB 第一个 MVC 5 应用程序。我的要求是对每个操作(包括读取)进行审计日志记录。我浏览了很多帖子,但很少有疑问:
- 应在 EF 级别(通过覆盖 SaveChanges)或 DB 级别(通过使用触发器)完成审核日志记录。这是推荐的方式。
- 我想为每个实体更改而不是每个属性更改记录一行。我在想的是制作一个有效的 XML 模式,但是每个实体都会有不同的模式,具体取决于列。关于如何实现这一目标的任何其他意见
- 我也想记录读取操作
- 最后一件事是,客户端希望使用 SHA3 或 MD5 维护每行的校验和值。
考虑到以上几点,建议的方法是什么。我真的可以使用一些指针。
【问题讨论】:
-
如果你想审计甚至读然后你需要为你的DBContext实现一个包装器然后审计
wrapper的操作,SaveChanges()可以审计Added和Modified实体未读像stackoverflow.com/questions/43466550/… 这样的实体,如果您的审计很复杂,请使用正确的Audit实用程序。 -
感谢您的评论,有推荐的
Audit实用程序吗?我看到你用了Audit.Net -
不客气,是的,我正在使用
Audit.Net,它功能强大且可靠,在此之前我实施了不正确且不可靠的自定义审核,它会给您Old和New值符合您的预期,但对于审计Select,您应该实现它,例如包装器。 -
是的
Read确实有问题,我不确定您会详细说明。使用导航属性,您可以阅读多个条目,同时只阅读一个。这就是为什么我问第 1 点我是否应该使用 DB 触发器。 -
不,我认为不值得使用 DB 触发器来知道是否读取了行,假设您有一个名为
Entity的实体,那么为名为EntityManagement的示例实现一个类就足够了它有一个名为Get(id)的方法,它返回特定的Entity然后在Get(id)你可以做Read Audit,我认为DBContext不应该被访问,DbContext应该在一些包装器中使用,那么如果开发人员需要处理数据,应该直接使用那些包装器而不是DbContext。
标签: asp.net-mvc entity-framework audit audit-trail