【发布时间】:2017-06-21 17:26:04
【问题描述】:
我正在为 EF Core 项目创建一个通用存储库,以避免必须为所有模型编写 CRUD。我遇到的一个主要障碍是导航属性没有被加载,因为 Core 还不支持延迟加载,而且泛型类显然不能定义 .Include 用于类特定属性的语句。
我正在尝试为我的 Get 方法做这样的事情来动态包含所有属性:
public virtual T Get(Guid itemId, bool eager = false)
{
IQueryable<T> querySet = _context.Set<T>();
if (eager)
{
foreach (PropertyInfo p in typeof(T).GetProperties())
{
querySet = querySet.Include(p.Name);
}
}
return querySet.SingleOrDefault(i => i.EntityId == itemId);
}
但在包含不是导航属性的属性时会引发错误。
我发现这个答案大致相同,但它适用于 EF 5,并且涉及 EF 核心中不存在的方法:
EF5 How to get list of navigation properties for a domain object
是否有可能在 EF Core 中完成同样的事情?
【问题讨论】:
-
只是一个建议,但不是有一个用于急切加载的参数,而是一个您想要急切加载的属性的 lambda 表达式?参数之类的。表达式
> 包括。 -
我想这是一个选项,我想避免开发人员在调用 repo 时必须指定一堆东西。
标签: c# entity-framework-core system.reflection