在我们的数据层中使用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已更改,但该信息对用户来说基本无用。我需要捕获的还有显示名称(我们所有实体都实现的东西)并记录它。
我唯一能想到的是:(免责声明这对我来说是一种可怕的解决方案)
我真的不想这样做。我无法想象之前没有出现过这种情况。那里会不会有暴露底层实体链接的魔法?
谢谢!
答案 0 :(得分:0)
除非有充分的理由在代码中专门执行此操作,否则我建议通过SQL Server Change Data Capture执行此操作。它在设置上需要很少的努力并且做得很好。 https://msdn.microsoft.com/en-us/library/cc645937.aspx