efcore 对象内容相同 提交MSSQL后数据库没有更新

发布于:2025-09-16 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、efcore 对象内容相同 提交MSSQL后数据库没有更新

在.net6+EFcore6环境,遇到一个问题,当界面UI传给EF的对象值没有变化,它居然不去更新数据库。那我有2个EFcore实例都在更新数据库,值一直不变,程序就更新不到数据库中。

 var one =  db.Dingding01s.FirstOrDefault();

  if (one != null)
  {
      one.Reply = textBox1.Text;
      one.Zstatus = textBox2.Text;
      db.Entry(one).State = EntityState.Modified;
      db.SaveChanges();               
  }

比如上面的代码,如果没有“db.Entry(one).State = EntityState.Modified;”这一条语句,它就会有上述问题。但是EFcore比EF麻烦一些了啊,之前重来更新对象不用写这一条语句。

二、使用AsNoTracking()从数据库立即查询,但不能更新数据库,需要把context分离出来。

比如下面代码,立即从数据库查询一次,用的read对象。写入数据库用的one对象。

  var read = db_read.Dingding01s.AsNoTracking().Where(p => p.Tmpid.Equals(ss[0])).FirstOrDefault();

  if (read != null)
  {
      if (!read.Zstatus.Equals("X"))
      {
          var  one = db_read.Dingding01s.Where(p => p.Tmpid.Equals(ss[0])).FirstOrDefault();
          one.Reply = ss[1];
          one.Zstatus = "X";
          db.Entry(one).State = EntityState.Modified;
          db.SaveChanges();
          await DingtalkRobotWebhookUtilites.SendMarkdownMessage(item.SessionWebhook, "回复", "数据保存!", false);

      }                          

      else 
      {
          await DingtalkRobotWebhookUtilites.SendMarkdownMessage(item.SessionWebhook, "回复", "这条数据已经确认过了!", false);
      }
   }