我知道有一个Load方法。
_dbContext.Entry(blog).Collection(b => b.Posts).Load()
但我正在尝试处理并发冲突,我已将 post 添加到 blog.Posts 中。如果调用 Load,它不会清除 blog.Posts,只是将现有的 Posts 添加到它。
我试过:
blog.Posts = null;
_dbContext.Entry(blog).Collection(b => b.Posts).Load()
但是 blog.Posts 变成了一个空集合(零计数)。
所以我想要一个Reload。
请您参考如下方法:
不幸的是,虽然 EntityEntry 有 Reload 方法,但是 ReferenceEntry 和 CollectionEntry 没有这样的方法(或者在一般而言,NavigationEntry 是前两者的基础)。而 Reload 方法仅刷新原始属性,因此不能用于刷新导航属性。
幸运的是,创建自定义的并不难。它需要分离(或重新加载?)所有当前集合项,将 IsLoaded 设置为 false 并将 CurrentValue 设置为 null 在调用 Load 之前。
像这样(把它放在你选择的静态类中并添加必要的 using):
public static void Reload(this CollectionEntry source)
{
if (source.CurrentValue != null)
{
foreach (var item in source.CurrentValue)
source.EntityEntry.Context.Entry(item).State = EntityState.Detached;
source.CurrentValue = null;
}
source.IsLoaded = false;
source.Load();
}
所以你可以使用所需的
_dbContext.Entry(blog).Collection(b => b.Posts).Reload();
