gpt4 book ai didi

c# - 每个实体的 EF6 Code First 审计表

转载 作者:行者123 更新时间:2023-11-30 16:54:18 34 4
gpt4 key购买 nike

我有一个要求,感觉它可能有一个比我们目前使用的更简单的 EF 解决方案。

本质上,作为审计要求,对于从给定基类继承的任何实体,我需要创建实体的表本身,但也需要创建一个相同的表,但有 3 个额外的列 - FK 回到原来的实体表、描述(例如“已修改”、“已添加”、“已删除”)和一个包含实体状态序列化版本的 XML 列。

目前,我们正在手动添加实体以创建审计表(目前继承自 AuditableEntity 类,开发人员必须手动确保其他字段与原始实体匹配)并使用迁移将 T-SQL 触发器添加到实体表在任何插入、更新、删除时更新审计表中的数据。

如果我能以某种方式让 EF 自动创建/迁移基于实体表的审计表,而无需手动同步它们,并且同样使用拦截器或类似的东西在插入/更新时更新审计表,我更愿意/删除实体而不是使用触发器。有谁知道这是否可能,或者做过类似的事情吗?过去,我最接近的是一个还不错的单一通用审计历史表。

最佳答案

免责声明:我是项目的所有者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

关于c# - 每个实体的 EF6 Code First 审计表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30714466/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com