我有一个与DbContext关联的DbSet(使用Entity Framework 4.3)。 DbSet最初加载给定表X的所有实体 问题是,在删除该表的一行或多行之后,我无法重新加载DbSet以获取表X的frech列表(由另一个应用程序中的另一个DbContext执行删除)。
以下是我用来重新加载表格中所有实体的行:
((IObjectContextAdapter) context).ObjectContext.Refresh(RefreshMode.ClientWins, col);
该行正常用于检索添加的实体或已更改的实体。
我也无法处理DbContext来获取frech实体,因为我的DbContext也携带了另一个实体,所有重新加载它们的时间太长了(我知道我不遵循规则说:DbContext应该用作一个跨国的对象)
答案 0 :(得分:4)
您可以“清除”Local
集合,然后重新加载:
foreach (var x in context.Set<X>().Local.ToList())
{
Entry(x).State = EntityState.Detached;
}
context.Set<X>().Load();
您无法执行context.Set<X>().Local.Clear();
,因为它会将集合中的所有项目标记为Deleted
,并且不会重新加载项目。