問題

我知道有一個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.

  最佳答案

不幸的是,雖然EntityEntryReload方法,但ReferenceEntryCollectionEntry(或一般來說,前兩個基礎的NavigationEntry)沒有這樣的方法.和Reload方法只重新整理原始屬性,所以它不能用於重新整理導航屬性.

幸運的是,建立自定義項並不難.在呼叫Load之前,它需要分離(或重新載入?)所有當前集合專案,將IsLoaded設定為falseCurrentValuenull.

這樣的東西(將其放在您選擇的靜態類中並新增必要的usings):

 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();
 

  相同標籤的其他問題

c#entity-framework-coreef-core-2.2