一、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);}}