gpt4 book ai didi

c# - 检查实体是否已被删除

转载 作者:行者123 更新时间:2023-11-30 12:12:13 27 4
gpt4 key购买 nike

我们正在使用 DbContext/Code First 在 winforms 应用程序中实现 Entity Framework ,并且有以下关于在另一个上下文中删除/更新实体时检查/处理的正确方法的问题。

例如,我们有一些辅助表数据(例如 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);
}
}

谢谢你的帮助

最佳答案

您不应该让上下文在其工作单元之后仍然有效。上下文应该只在需要时存在,否则你一定会像你观察到的那样陷入缓存陷阱。 (此外,在需要时实例化它过于耗时/资源密集型的情况下,上下文确实那么繁重)。

如果您真的必须让它保持事件状态,您可能需要考虑将上下文传递给辅助表单。

从我的评论中反射(reflect)出来,认为它最好作为答案

关于c# - 检查实体是否已被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com