目的は簡単です。 ScheduleテーブルのLastUpdated列を更新する必要があります。私はその目標を達成するためにいくつかの異なる方法を試みましたが、成功しませんでした。私は、コードが正しいデータベースを指していることを確信しています。また、正しい[ローカル]データベースで変更をチェックしています。 SaveChanges()にブレークポイントが設定されると、コードはそのポイントで停止します。 "db"には正しいレコードの更新日時情報が含まれていることがわかります。それでも、データベースには保存されません。DbContextはそれが示す変更を保存しません
Stack Overflowを経て、Attachを使用してEntity Stateを[Modified]に設定するなどのいくつかの提案を試みました。これらの提案はどちらも機能しませんでした。 HasChangesは、変更がコンテキスト変数に適用されているのを見ることはできますが、falseを返します。
また、このメソッドに含まれるクラスには、データベースにアクセスしていくつかの挿入を行うことに問題がない他のメソッドが含まれています。以下のコードは、私がどのようにそれをしようとしているかについてのアイデアを伝える3つの異なる試みです。どんな提案も大歓迎です。
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();
}
}
更新していないことをどのように知っていますか? SQLが送信されているかどうかを確認するには、SQLプロファイラーを確認してください。どのデータベースですか?あなたはVSの内部データベースがあなたにアップデートを見せないようにさせているかもしれないことに気付いていますか?データベースに更新がないことをどのように確認しますか?ローカルデータベースプロジェクトですか?あなたはプログラムunsよりも別のコピーを見ます(そして、実行されているものはすべての開始時に上書きされます)。 – TomTom
SSMSでSELECT * FROM Schedulesを実行すると(もちろん、ブレークポイントで続行しても)、値が変更されていないことがわかります。現時点でテーブルには3つのレコードしかありませんので、更新はほとんど見られません。 – John
彼らは変更されていないわけではないかもしれませんが、間違ったデータベースを見ているだけです。プロファイル、SQLが送信されているかどうかを確認します。 – TomTom