Entity Framework 核心更新未更改字段

Entity Framework Core updating unchanged fields

我不确定这是关于 Entity Framework 的问题,还是关于 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

My goal is to capture only actual changes to the record

那你不应该使用Update方法。

根据Update方法documentation:

Begins tracking the given entity in the Modified state such that it will be updated in the database when SaveChanges() is called.

All properties of the entity will be marked as modified. To mark only some properties as modified, use Attach(Object) to begin tracking the entity in the Unchanged state and then use the returned EntityEntry to mark the desired properties as modified.

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