在数据库中删除行后更新DbSet.Local

时间:2013-10-29 15:16:30

标签: .net c#-4.0 entity-framework-5

我有一个与DbContext关联的DbSet(使用Entity Framework 4.3)。 DbSet最初加载给定表X的所有实体 问题是,在删除该表的一行或多行之后,我无法重新加载DbSet以获取表X的frech列表(由另一个应用程序中的另一个DbContext执行删除)。

以下是我用来重新加载表格中所有实体的行:

 ((IObjectContextAdapter) context).ObjectContext.Refresh(RefreshMode.ClientWins, col);

该行正常用于检索添加的实体或已更改的实体。

我也无法处理DbContext来获取frech实体,因为我的DbContext也携带了另一个实体,所有重新加载它们的时间太长了(我知道我不遵循规则说:DbContext应该用作一个跨国的对象)

1 个答案:

答案 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,并且不会重新加载项目。

(由Code First: problem with Local collection提供)。