Jok*_*ang 3 c# entity-framework-core ef-core-2.2
我知道有一个Load方法。
_dbContext.Entry(blog).Collection(b => b.Posts).Load()
Run Code Online (Sandbox Code Playgroud)
但我试图处理并发冲突,我已经加一post成blog.Posts。如果调用Load,它不会清除blog.Posts,只需将现有附加Posts到它。
我曾尝试:
blog.Posts = null;
_dbContext.Entry(blog).Collection(b => b.Posts).Load()
Run Code Online (Sandbox Code Playgroud)
但blog.Posts成为一个空集合(零计数)。
所以我想要一个Reload.
不幸的是,虽然EntityEntry有Reload方法,但没有这样的方法ReferenceEntry和CollectionEntry(或者一般来说,NavigationEntry前两个的基础)。并且Reload方法只刷新原始属性,因此不能用于刷新导航属性。
幸运的是,创建一个自定义的并不难。它需要分离(或重装?)所有当前收集的物品,设置IsLoaded到false和CurrentValue到null之前调用Load。
像这样的东西(将它放在您选择的静态类中并添加必要的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();
}
Run Code Online (Sandbox Code Playgroud)
所以你可以使用所需的
_dbContext.Entry(blog).Collection(b => b.Posts).Reload();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
914 次 |
| 最近记录: |