C# 如何在EF Core 2.x中重新加载集合?

C# 如何在EF Core 2.x中重新加载集合?,c#,entity-framework-core,ef-core-2.2,C#,Entity Framework Core,Ef Core 2.2,我知道有一种加载方法 \u dbContext.Entry(blog.Collection)(b=>b.Posts.Load()) 但是我正在尝试处理并发冲突,我已经在blog.Posts中添加了post。如果调用Load,则不会清除blog.Posts,只需将现有的Posts附加到它 我试过: blog.Posts=null; _dbContext.Entry(blog.Collection)(b=>b.Posts.Load()) 但是blog.Posts变成了一个空集合(零计数) 因此,

我知道有一种加载方法

\u dbContext.Entry(blog.Collection)(b=>b.Posts.Load())
但是我正在尝试处理并发冲突,我已经在
blog.Posts
中添加了
post
。如果调用
Load
,则不会清除
blog.Posts
,只需将现有的
Posts
附加到它

我试过:

blog.Posts=null;
_dbContext.Entry(blog.Collection)(b=>b.Posts.Load())
但是
blog.Posts
变成了一个空集合(零计数)


因此,我想要一个
重新加载

,不幸的是,尽管
EntityEntry
重新加载
方法,但对于
引用条目
集合entry
(或者一般来说,对于作为前两个基础的
导航entry
),没有这样的方法。而
Reload
方法只刷新原语属性,因此不能用于刷新导航属性

幸运的是,创建一个定制的并不难。它需要分离(或重新加载?)所有当前集合项,在调用
Load
之前,将
IsLoaded
设置为
false
,将
CurrentValue
设置为
null

类似这样的内容(将其放入您选择的静态类中,并使用s添加必要的
):

因此,您可以使用所需的

_dbContext.Entry(blog).Collection(b => b.Posts).Reload();

您的基本问题似乎是试图以多线程方式使用
DbContext
。每个线程都应该有自己的
DbContext
as实例。@SixtoSaez不,我保证它不是多线程的。DbContext来自DI。我只是使用Class.Method来描述哪个类的实例并调用哪个方法。为了澄清这个问题,我将DbContext改为_DbContext。是否需要分离
赋值?如果我只设置
source.CurrentValue=null然后设置
source.IsLoaded=false
source.Load(),安全吗?不安全。我的测试表明所有这些都是必要的。不分离项目您将获得缓存的项目,而不是数据库中的新项目,以及添加的项目,但不是删除的项目。@IvanStoev这对我不起作用。如果您有时间,请查看此处:
_dbContext.Entry(blog).Collection(b => b.Posts).Reload();