2016-03-23 16 views
0

目的は簡単です。 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(); 
    } 
} 
+2

更新していないことをどのように知っていますか? SQLが送信されているかどうかを確認するには、SQLプロファイラーを確認してください。どのデータベースですか?あなたはVSの内部データベースがあなたにアップデートを見せないようにさせているかもしれないことに気付いていますか?データベースに更新がないことをどのように確認しますか?ローカルデータベースプロジェクトですか?あなたはプログラムunsよりも別のコピーを見ます(そして、実行されているものはすべての開始時に上書きされます)。 – TomTom

+0

SSMSでSELECT * FROM Schedulesを実行すると(もちろん、ブレークポイントで続行しても)、値が変更されていないことがわかります。現時点でテーブルには3つのレコードしかありませんので、更新はほとんど見られません。 – John

+0

彼らは変更されていないわけではないかもしれませんが、間違ったデータベースを見ているだけです。プロファイル、SQLが送信されているかどうかを確認します。 – TomTom

答えて

1

の変化を示す必要があります計算された。私は同じテーブルの別の列をそのメソッドから更新しようとしましたが、うまくいきました。その後、私は計算カラムに関するいくつかの研究を行い、それが問題であることを発見しました。アノテーションを削除した後、コードは正常に動作します。ここで、アノテーションなしでデフォルト値を設定する方法を理解する必要があります。

ソリューションとコメントをご提供いただき、ありがとうございます。とても有難い!

0

それは結局のところあなたは列があったため、試行錯誤の多くの後に...問題があったので、

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

または

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

https://msdn.microsoft.com/en-us/data/jj592676.aspxを参照してください。 –

+3

コンテキストで変更追跡が有効になっていると、エンティティの状態が変更されたことを示すことはありません。 –

+0

よろしくお願いします。私はこのリンクの中でもっと尊重して読んでいます。http://www.c-sharpcorner.com/UploadFile/ff2f08/working-with-change-tracking-proxy-in-entity-framework-6-0/ – Maske

関連する問題