Entity framework core 实体框架核心更新未更改字段

Entity framework core 实体框架核心更新未更改字段,entity-framework-core,audit.net,Entity Framework Core,Audit.net,我不确定这是否是一个关于实体框架的问题,或者是关于audit.net库如何工作的问题,但我猜是关于我如何使用EF执行更新的问题。我的目标是只捕获记录的实际更改,但它将所有内容都捕获为更改,即使新旧值相同 基本上是尽可能地简化它,如果我这样做的话 var existing = context.Appl.FirstOrDefault(a => a.Id == id); context.Appl.Update(existing); context.SaveChanges(); (不做任何更改)

我不确定这是否是一个关于实体框架的问题,或者是关于audit.net库如何工作的问题,但我猜是关于我如何使用EF执行更新的问题。我的目标是只捕获记录的实际更改,但它将所有内容都捕获为更改,即使新旧值相同

基本上是尽可能地简化它,如果我这样做的话

var existing = context.Appl.FirstOrDefault(a => a.Id == id);
context.Appl.Update(existing);
context.SaveChanges();
(不做任何更改)

Audit.Net更改日志显示每个字段都已更改,看起来

   "Changes": [
      {
        "ColumnName": "FOO",
        "OriginalValue": "",
        "NewValue": ""
      },
      ..... many more
我的目标是只捕获记录的实际更改

那么您不应该使用
更新
方法

根据
更新
方法:

开始跟踪处于
Modified
状态的给定实体,以便在调用
SaveChanges()
时在数据库中更新该实体

实体的所有属性都将标记为“已修改”。要仅将某些属性标记为已修改,请使用
Attach(Object)
开始跟踪处于未更改状态的实体,然后使用返回的
EntityEntry
将所需属性标记为已修改


Update
方法的主要用法是在使用时执行所谓的强制更新。由于现有的
实体是从上下文中检索的(或者换句话说,是由上下文跟踪的),因此您只需设置新值。更改跟踪器将检测是否存在实际的属性更改,并将发出仅带有修改值的
UPDATE
命令(或者如果所有当前值都等于原始值,则根本不发出
UPDATE
命令)。

这将很容易获得每次更改时实体的状态。只要想想你有一个实体,你已经修改了100次。你只需要这个实体在特定时间的状态。否则,获取此类信息会很复杂我不知道你在说什么。我不想捕捉原始值和新值是否相同。