实体框架审计1到多个关系并捕获相关实体

时间:2017-02-15 17:08:27

标签: c# entity-framework entity-framework-6

在我们的数据层中使用EF(代码优先),我们需要为实体更改启用审核功能。我已经能够弄清楚如何使用Change Tracker成功捕获对值类型属性的更改。我现在也相信如何获取记录多对多关系所需的信息。

我剩下的问题是如何记录1对多关系并捕获实体信息。

在以下实体中,让我们假设种族已经改变。

 public class Person
 {
      public Guid Id { get; set; }
      public Guid? EthnicityId { get; set; }
      public Ethnicity Ethnicity { get; set; }
 }

在SaveChanges的幕后,它只会为您提供已更改属性的键值对列表。因此,在这种情况下你实际得到的只有:" EntityId"," {A GUID HERE}"。我可以记录guid已更改,但该信息对用户来说基本无用。我需要捕获的还有显示名称(我们所有实体都实现的东西)并记录它。

我唯一能想到的是:(免责声明这对我来说是一种可怕的解决方案)

  1. 查看属性名称。
  2. 如果字符串以Id结尾但不仅仅是" Id"然后修剪它。
  3. 使用Trimmed属性名称字符串获取对该类型的引用(在本例中为Enthnicity)
  4. 再次使用EF通过Guid为该类型执行ID获取。
  5. 将对象转换为具有DisplayName的基本类型。
  6. 获取显示名称并将其添加到日志中。
  7. 我真的不想这样做。我无法想象之前没有出现过这种情况。那里会不会有暴露底层实体链接的魔法?

    谢谢!

1 个答案:

答案 0 :(得分:0)

除非有充分的理由在代码中专门执行此操作,否则我建议通过SQL Server Change Data Capture执行此操作。它在设置上需要很少的努力并且做得很好。 https://msdn.microsoft.com/en-us/library/cc645937.aspx

相关问题