一、efcore 对象内容相同 提交MSSQL后数据库没有更新
在.net6+EFcore6环境,遇到一个问题,当界面UI传给EF的对象值没有变化,它居然不去更新数据库。那我有2个EFcore实例都在更新数据库,值一直不变,程序就更新不到数据库中。
cs
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对象。
cs
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);
}
}