我有一个要求,感觉它可能比我们目前使用的EF更简单的解决方案。
基本上,作为审计要求,对于从给定基类继承的任何实体,我需要创建实体表本身,但也需要创建一个相同的表,但另外还有3个表columns - FK返回原始实体的表,描述(例如" Modified"," Added"," Deleted")和XML列它将包含实体状态的序列化版本。
目前,我们手动添加实体来创建审计表(当前继承自AuditableEntity类,开发人员必须手动确保其他字段与原始实体匹配)并使用迁移添加T-SQL触发器在实体表中更新任何插入,更新,删除的审计表中的数据。
如果我能够以某种方式让EF根据实体表自动创建/迁移审计表而不必手动同步它们,并且同样使用拦截器或类似的东西来更新插入的审计表,我更喜欢/更新/删除实体而不是使用触发器。有谁知道这是可能的,还是做了类似的事情?在过去,我最接近的是一个单一的,通用的审计历史表,并不是太糟糕。
答案 0 :(得分:1)
您可以创建一个包含列的表:
然后重写SaveChanges()以将每个更改写入该表。
无需在运行迁移等时保持审核表架构的最新状态
答案 1 :(得分:1)
免责声明:我是该项目的所有者Entity Framework Plus
该项目可能符合您的要求。您可以访问所有审核信息,如实体名称,操作名称,属性名称,原始值和当前值等。
有许多选项可供使用,例如自动保存数据库中的所有信息。
// using Z.EntityFramework.Plus; // Don't forget to include this.
var ctx = new EntityContext();
// ... ctx changes ...
var audit = new Audit();
audit.CreatedBy = "ZZZ Projects"; // Optional
ctx.SaveChanges(audit);
// Access to all auditing information
var entries = audit.Entries;
foreach(var entry in entries)
{
foreach(var property in entry.Properties)
{
}
}
文档:EF+ Audit