实体框架核心更新未更改的字段

Chr*_*ris 4 entity-framework-core audit.net

我不确定这是关于Entity Framework的问题,还是audit.net库的工作原理,但我猜测它与我如何使用EF进行更新有关.我的目标是仅捕获记录的实际更改,但它将捕获所有内容作为更改,即使旧值和新值相同也是如此.

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

var existing = context.Appl.FirstOrDefault(a => a.Id == id);
context.Appl.Update(existing);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

(什么都没改变)

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

   "Changes": [
      {
        "ColumnName": "FOO",
        "OriginalValue": "",
        "NewValue": ""
      },
      ..... many more
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 6

我的目标是仅捕获记录的实际更改

那你就不应该使用这个Update方法.

根据Update方法文档:

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

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

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