我不确定这是否是关于实体框架的问题,还是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
我的目标是仅捕获记录的实际更改
然后,您不应该使用该Update
方法。
根据Update
方法文档:
开始跟踪处于
Modified
状态的给定实体,以便在SaveChanges()
调用该实体时将在数据库中对其进行更新。实体的所有属性将被标记为Modifyed。若要仅将某些属性标记为已修改,请使用
Attach(Object)
来开始跟踪处于“未更改”状态的实体,然后使用返回值EntityEntry
将所需的属性标记为已修改。
方法的主要用法Update
是在使用Disconnected Entities时执行所谓的强制更新。由于您的实体是从上下文中检索的(换句话说,是由上下文跟踪的),因此,您所需要做的就是设置新值。变更跟踪器将检测是否存在实际的属性变更,并仅发出修改后的值的命令(如果所有当前值均等于原始值,则根本不发出命令)。existing
UPDATE
UPDATE
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句