背景:
我有一个 Web 应用程序,我需要对其进行数据库审计以进行插入/删除/更新(可能还有读取)。我使用 LINQ 作为我的 ORM。使用我在网上找到的一些想法,我想出了一种使用属性来装饰具有关联审计表的实体的方法。审计表本身除了当前用户的id和名称、修改类型、修改时间、操作是否成功等字段外,还需要包含与原表相同类型的相同列。审计发生在 SubmitChanges 期间——我的数据上下文是抽象的,我在具体实现中继承和覆盖 SubmitChanges。抽象数据上下文实际上是从 AbstractAuditableDataContext 派生的,它扩展了 DataContext 并添加了一个 CurrentUser 属性,其中包含当前用户 ID 和名称的占位符。默认情况下,对于没有登录用户的实例,这些是 0 和“系统”——比如在注册或登录期间,当用户表的某些字段可能被更新时。该应用程序是使用 ASP.NET MVC 用 C# 编写的。
问题:
填充派生数据上下文的当前用户属性的最佳方法是什么?我是否应该创建一个注入到 AuditUtility 中的实用程序类,以检查 CurrentUser 是否已设置,如果没有,则将其填充。为了测试我会模拟它,但在实时应用程序中它可能会使用惰性- 加载并在会话中获取/设置它。或者我应该修改数据上下文工厂(由所有控制器使用)来执行此功能。我已经在单元测试期间使用了模拟工厂,因此这不会涉及创建新类。或者是否应该在工厂之外进行派生,并在上下文创建期间注入当前用户。这将允许我“代表”审计。
我意识到这有点主观,但我很感激你可能贡献的任何想法/经验。
谢谢。