【问题标题】:EF 6 DB First Audit LogsEF 6 数据库首次审核日志
【发布时间】:2019-06-16 19:13:52
【问题描述】:

我有一个 EF 6 DB 第一个 MVC 5 应用程序。我的要求是对每个操作(包括读取)进行审计日志记录。我浏览了很多帖子,但很少有疑问:

  1. 应在 EF 级别(通过覆盖 SaveChanges)或 DB 级别(通过使用触发器)完成审核日志记录。这是推荐的方式。
  2. 我想为每个实体更改而不是每个属性更改记录一行。我在想的是制作一个有效的 XML 模式,但是每个实体都会有不同的模式,具体取决于列。关于如何实现这一目标的任何其他意见
  3. 我也想记录读取操作
  4. 最后一件事是,客户端希望使用 SHA3 或 MD5 维护每行的校验和值。

考虑到以上几点,建议的方法是什么。我真的可以使用一些指针。

【问题讨论】:

  • 如果你想审计甚至读然后你需要为你的DBContext实现一个包装器然后审计wrapper的操作,SaveChanges()可以审计AddedModified实体未读像stackoverflow.com/questions/43466550/… 这样的实体,如果您的审计很复杂,请使用正确的Audit 实用程序。
  • 感谢您的评论,有推荐的Audit 实用程序吗?我看到你用了Audit.Net
  • 不客气,是的,我正在使用Audit.Net,它功能强大且可靠,在此之前我实施了不正确且不可靠的自定义审核,它会给您OldNew值符合您的预期,但对于审计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


【解决方案1】:

为了实现这一点,我没有使用任何实用程序,因为我的要求有点不同。最后,我继续重写 EF 使用的 DbContextSaveChanges 方法。还使用 Newtonsoft JSON 库将整个更新的对象转换为 JSON 并保存。

要获取完整代码,请查看此链接 - How to audit MVC app which used EF DB first approach

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2019-10-02
    • 2018-07-09
    相关资源
    最近更新 更多