DbContext没有保存更改它显示它有

时间:2016-03-23 15:26:48

标签: c# entity-framework

目标很简单。我需要更新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();
    }
}

2 个答案:

答案 0 :(得分:1)

事实证明,经过大量的试验和错误......问题是因为列是计算出来的。我尝试从该方法更新同一个表中的另一列,它工作正常。然后我对计算列进行了一些研究,发现问题就在于此。删除注释后,代码工作正常。现在我只需要弄清楚如何在没有注释的情况下获得默认值。

感谢所有提供解决方案和评论的人。非常感谢!

答案 1 :(得分:0)

您必须指明更改

db.Entry(schedule3).State = EntityState.Modified;

db.Entry(schedule3).Property(x => x.LastUpdated).IsModified = true;