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字段的值取出来,进行时间间隔的判断就可以了。

  但不知道为什么会出现这种情况,希望有人能讨论交流一下。

posted @ 2021-05-15 20:15  陈子白  阅读(228)  评论(0编辑  收藏  举报