我不确定这是关于实体框架的问题,还是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
答案 0 :(得分:5)
我的目标是只捕获对记录的实际更改
然后你不应该使用Update
方法。
根据Update
方法documentation:
开始跟踪
Modified
状态的给定实体,以便在调用SaveChanges()
时在数据库中更新它。该实体的所有属性都将标记为已修改。要仅将某些属性标记为已修改,请使用
Attach(Object)
开始跟踪处于“未更改”状态的实体,然后使用返回的EntityEntry
将所需属性标记为已修改。
Update
方法的主要用法是在使用Disconnected Entities时执行所谓的强制更新。由于您的existing
实体是从上下文中检索的(换句话说,由上下文跟踪),因此您只需要设置新值。更改跟踪器将检测是否存在实际的属性更改,并且如果所有当前值都等于原始值,则将仅发出UPDATE
命令仅包含修改后的值(或者根本没有UPDATE
命令。)