C# EF 6和更高版本是否提供了更好的审核与数据交互的方法?

C# EF 6和更高版本是否提供了更好的审核与数据交互的方法?,c#,entity-framework,C#,Entity Framework,我的任务是开发一种审计数据库中数据的读取/编辑/删除的方法。我搜索了如何使用EF实现这一点。我在CodeProject上找到了这篇博文。然而,这篇文章是在2009年写的。我相信它会起作用,但我想知道如果使用EF 6或更高版本,是否有更好的方法来实现这一点?EF 6+是否有更新的方法获取日志/审核所需的数据?是否有使用EF 6+进行审计的“最佳实践”类型的方法?审计仍然只能通过自己实施或使用第三方库来实现,即使对于EF6或EF Core也是如此 免责声明:我是项目的所有者 此库支持EF5、EF6和

我的任务是开发一种审计数据库中数据的读取/编辑/删除的方法。我搜索了如何使用EF实现这一点。我在CodeProject上找到了这篇博文。然而,这篇文章是在2009年写的。我相信它会起作用,但我想知道如果使用EF 6或更高版本,是否有更好的方法来实现这一点?EF 6+是否有更新的方法获取日志/审核所需的数据?是否有使用EF 6+进行审计的“最佳实践”类型的方法?

审计仍然只能通过自己实施或使用第三方库来实现,即使对于EF6或EF Core也是如此

免责声明:我是项目的所有者

此库支持EF5、EF6和EF Core,并具有多个必备功能,如数据库中的AutoSave

// 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)
    {
    }
}

文档:

根据您的需要,这里有一些选项。我认为审计最好在数据库级别进行,这是因为性能和审计在实体框架上下文之外所做的更改。根据Sql Server版本和版本,您可能可以使用内置功能,如

如果您需要包含应用程序级数据,您可以将其与使用拦截器结合使用(请参阅)


想到的另一个选项是在SaveChanges的覆盖中编写一些审计逻辑(请参阅)。这只会影响保存而不会读取…

但为什么不使用数据库触发器呢?作为一个额外的好处,它将直接记录在数据库上执行的所有操作,而不使用EF。我已经要求使用数据库触发器。我被告知不要这样做。这就是为什么我必须寻求其他解决方案。希望他们除了“不”之外还提供了一些论据。看看图书馆。乔纳森,我认为你回答这样的问题很好。此外,您总是适当地提及您的个人利益(免责声明)。然而,我认为最好将这些问题标记为您以前回答过的类似问题的副本。您可以选择其中一个答案作为标准答案,当您认为有关库的新信息有帮助时,可以随时更新该答案。副本将作为此答案的路标。感谢Gert的反馈。我个人不喜欢“重复”,因为它们从未针对当前用户/问题进行个性化设置,但我会尝试更频繁地将它们标记为与我的另一个答案重复。除非答案需要一些代码定制,否则我将尝试按照您提到的那样做。谢谢!是的,无论一个问题是否不同到值得自己回答,这总是一个很好的平衡。也许这句话是-你的第一句话回答了OP的问题。无论如何,在一个问题真正被认为是重复的之前,还需要另外四张票,所以这不仅仅取决于你的意见。