目标很简单。我需要更新Schedule表中的LastUpdated列。我已经尝试了几种不同的方法来实现这一目标,但没有成功。我确定代码指向正确的数据库,我也正在检查更正的正确[本地]数据库。在SaveChanges()上设置断点时,代码将在此时停止。我可以看到“db”包含正确记录的更新日期/时间信息。但是,它不会将其保存到数据库中。
经历了Stack Overflow后,我尝试了一些建议,比如使用Attach并设置Entity State [to Modified]。这些建议都没有奏效。 HasChanges返回false,即使我可以看到更改应用于上下文变量。
此外,此方法所在的类包含其他方法,这些方法在访问数据库和执行某些插入操作时没有问题。下面的代码只是三个不同的尝试,让您了解我是如何尝试这样做的。任何建议都将不胜感激。
public static void UpdateLastUpdated(int scheduleId)
{
using (var db = new MyContext())
{
var schedule = from s in db.Schedule where s.Id == scheduleId select s;
schedule.FirstOrDefault().LastUpdated = DateTime.Now;
db.SaveChanges();
var schedule2 = db.Schedule.Find(scheduleId);
schedule2.LastUpdated = DateTime.Now;;
db.SaveChanges();
var schedule3 = db.Schedule.Single(s => s.Id == scheduleId);
schedule3.LastUpdated = DateTime.Now;
db.SaveChanges();
}
}
答案 0 :(得分:1)
事实证明,经过大量的试验和错误......问题是因为列是计算出来的。我尝试从该方法更新同一个表中的另一列,它工作正常。然后我对计算列进行了一些研究,发现问题就在于此。删除注释后,代码工作正常。现在我只需要弄清楚如何在没有注释的情况下获得默认值。
感谢所有提供解决方案和评论的人。非常感谢!
答案 1 :(得分:0)
您必须指明更改
db.Entry(schedule3).State = EntityState.Modified;
或
db.Entry(schedule3).Property(x => x.LastUpdated).IsModified = true;