【发布时间】:2017-11-12 00:18:14
【问题描述】:
我有一个连接到数据库的简单应用程序(实体框架,代码优先)。我有一个用于更新数据库条目的屏幕。我可以使用以下代码更新数据库:
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);
}
如果我在调用 SaveChanges 后立即刷新数据库,我可以看到实际数据库中的更改,但如果我查看 _context.Players,旧值仍然存在。只有在我关闭我的应用程序并重新打开它之后,更改才会出现在 DbContext 中。调用 SaveChanges 后,如何确保数据库中的更新数据出现在我的 DbContext 中?
更新:
我已将代码更改为以下内容:
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();
}
我仍然有同样的问题。记录在数据库中更新,但在应用程序中没有更新,因此我的 UI 不会使用新数据进行更新。即使我从数据库重新加载整个播放器集合,在我完全重新启动应用程序之前也不会更新任何内容。
【问题讨论】:
-
您很可能在两次调用之间保持上下文处于打开状态。尝试
using语句或更好的 IoC 容器。 stackoverflow.com/questions/28042161/ef-returns-old-values -
你究竟是如何“看 _context.Players”的?
-
你可以试试.Find()
-
EF 保留检索到的值的快照。但是,_context.Players 的枚举应该导致另一个 db 调用来检索更新的值,除了查看存储对象的内部 dbcontext 属性之外,我真的不知道如何检索值。
-
我尝试了
using语句,以及更改了入口状态,但仍然没有成功。
标签: c# entity-framework