NuN*_*DdY 5 c# entity-framework
我们正在使用 DbContext/Code First 在 winforms 应用程序中实现实体框架,并且有以下关于在另一个上下文中删除/更新实体时检查/处理的正确方法的问题。
例如,我们有一些辅助表数据(例如 StateCodes),用户可以进入另一个并根据需要添加/删除状态。这个辅助编辑器表单利用它自己的 DbContext 并在用户退出表单后保存更改。返回主窗体后,主上下文不知道对数据库所做的更改,因此我们希望重新加载实体的 DbSet。不幸的是,如果我们删除“MI”状态代码,它仍然存在于 DbSet 的 Local 属性中,即使在我们调用“Load”来引入所有内容之后,EntityState 仍保持不变。
除了完全处理主上下文之外,以下是检查和查看是否从数据库中删除了哪些实体的最佳方法?
foreach (State state in db.States.Local)
{
DbEntityEntry entry = db.Entry(state);
DbPropertyValues databaseValues = entry.GetDatabaseValues();
if (databaseValues == null)
{
db.States.Remove(state);
}
else
{
entry.OriginalValues.SetValues(databaseValues);
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助
您不应该让上下文在其工作单元之后保持活动状态。上下文应该只在需要时存在,否则您一定会遇到像您所观察到的那样的缓存陷阱。(此外,上下文实际上并没有那么重,在需要时实例化它过于耗时/资源密集)。
如果您确实必须使其保持活动状态,您可能需要考虑将上下文传递给辅助表单。
从我的评论中反映出来,认为这是最好的答案
| 归档时间: |
|
| 查看次数: |
1703 次 |
| 最近记录: |