gpt4 book ai didi

c# - Entity Framework Core 根据类的类型显式加载相关数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:47 28 4
gpt4 key购买 nike

我有包含包含的存储库类。下面的代码适用于一对一关系。但是对于集合,我需要将 DbContext.Entry(model.Result).Reference(include).Load(); 更改为 DbContext.Entry(model.Result).Collection(include)。加载();

    public virtual async Task<TEntity> GetByIdAsync(object[] keyValues,
List<Expression<Func<TEntity, object>>> includes,
CancellationToken cancellationToken = default(CancellationToken))
{
var model = DbSet.FindAsync(keyValues, cancellationToken);
if (includes == null) return await model;
foreach (var include in includes)
//if (include.Body.Type.IsAssignableFrom(typeof(ICollection<>)))
DbContext.Entry(model.Result).Reference(include).Load();

return await model;

//return await DbSet.FindAsync(keyValues, cancellationToken);
}

为了将引用和集合彼此分开,我可以在这里使用什么样的条件?

谢谢。

编辑:示例对象是

System.Collections.Generic.IList`1[[WestCore.Domain.Entities.WestLife.MhpProduct]]

一般来说,集合可以是ICollection或IList。

最佳答案

您可以使用更通用的 Navigation 而不是单独的 Reference/Collection 方法方法。不幸的是,它没有 lambda 表达式重载,因此您需要手动提取属性名称。由于您的方法设计不支持嵌套属性,您可以从 lambda 表达式主体获取该信息,转换为 MemberExpression :

foreach (var include in includes)
{
var propertyName = ((MemberExpression)include.Body).Member.Name;
DbContext.Entry(model.Result).Navigation(propertyName).Load();
}

关于c# - Entity Framework Core 根据类的类型显式加载相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323086/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com