EF中数据修改时动态更新其他数据
场景
利用.net core开发时,经常会遇到使用EF(Entity Framework),但是今天在开发过程中发现一个值莫名其妙的自己变了,我怀疑是EF的问题。
主要代码如下:
1 // 最近一条告警数据 2 ErrorRecord lastError = new ErrorRecord(); 3 // 查询最近一条 4 ErrorRecord error = _unitWork.Find<ErrorRecord>(u => u.State == 0 && u.DeviceId == device.Id && u.RuleId == rule.Id).OrderByDescending(u => u.LastErrorTime).ToList().First(); 6 // 进行赋值 7 lastError = error; 8 9 error.LastErrorTime = DateTime.Now; 10 _unitWork.Update(error); 11 12 // 判断时间间隔 13 if((DateTime.Now - lastError.LastErrorTime).Minutes > 5) 14 { 15 // do something 16 }
其中的Update()函数代码如下:
var entry = this._context.Entry(entity); entry.State = EntityState.Modified; //如果数据没有发生变化 if (!this._context.ChangeTracker.HasChanges()) { entry.State = EntityState.Unchanged; }
问题就出现在lastError。当我更新数据库中error的LastErrorTime时,这里的Update函数只用了修改,并没有更新。但此时用来记录一开始时间的lastError的时间也改变了。
解决
解放方法倒是很简单,就是把那一个LastErrorTime字段的值取出来,进行时间间隔的判断就可以了。
但不知道为什么会出现这种情况,希望有人能讨论交流一下。