データベース(Entity Framework、コードファースト)に接続されている単純なアプリケーションがあります。私は、データベースへのエントリを更新するために使用される画面を持っています。私は、次のコードでデータベースを更新することができる午前:私はすぐにSaveChangesメソッドを呼び出した後、データベースを更新する場合は、私が実際のデータベースの変更を見ることができますDbContextにEntity Frameworkデータベースの変更がありません
public void UpdatePlayer()
{
Player playerInDb = GetPlayerFromDb(_player.Id);
playerInDb.Name = Name;
playerInDb.Score = Score;
_context.SaveChanges();
TryClose();
}
private Player GetPlayerFromDb(int id)
{
return _context.Players.Single(p => p.Id == id);
}
、私は_context.Playersを見れば、古いです値はまだそこにあります。私は、アプリケーションを閉じてからDbContextに変更が反映された後でなければなりません。 SaveChangesを呼び出した後、データベースから更新されたデータがDbContextに表示されることを確認するにはどうすればよいですか?
UPDATE:私は次のように私のコードを変更した
:
public void UpdatePlayer()
{
Player playerInDb = GetPlayerFromDb(_player.Id);
playerInDb.Name = Name;
playerInDb.Score = Score;
using (var context = new ApplicationDbContext())
{
context.Players.Attach(playerInDb);
context.Entry(playerInDb).State = EntityState.Modified;
context.SaveChanges();
}
TryClose();
}
私はまだ同じ問題を持っています。レコードはdbでは更新されますが、アプリケーションでは更新されないため、新しいデータでUIが更新されません。たとえ私がデータベースからプレーヤーのコレクション全体をリロードしても、アプリケーションを完全に再起動するまで何も更新されません。
2つの呼び出しの間にコンテキストを開いたままにしている可能性があります。 'using'ステートメントか、もっと良いIoCコンテナーを試してみてください。 https://stackoverflow.com/questions/28042161/ef-returns-old-values –
「どのように_context.Playersを見ますか」 – Evk
あなたは試してみることができます。Find() – hasan