2017-02-15 114 views
2

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

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

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

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

在SaveChanges的幕后,它只给你一个关键值对列表,用于更改属性。因此,您在这种情况下实际得到的是:“EntityId”,“{GUID HERE}”。我可以记录guid改变了,但这些信息对用户来说基本上是无用的。我需要捕获的还有显示名称(我们所有的实体都在实现)以及记录。

我能想到的唯一的事情:(免责声明这种感觉就像一个可怕的解决方案给我)

  1. 看属性名称。
  2. 如果字符串以Id结尾,但不是“Id”,请将其修剪掉。
  3. 使用修剪后的属性名称字符串获取对该类型的引用(在本例中为Enthnicity)
  4. 再次使用EF通过Guid的该类型的ID进行获取。
  5. 将该对象转换为具有DisplayName的基本类型。
  6. 获取显示名称并将其添加到日志。

我真的宁愿不必这样做。我无法想象此前还没有出现。那里有没有什么魔法可以暴露底层的实体链接?

谢谢!

回答