【发布时间】:2018-09-03 18:17:26
【问题描述】:
我有一个服务,它传入参数来确定我想要包含多少导航属性。基于布尔参数,它连接一个实体列表以包括每个所需的外国实体。
在运行时,我希望不包含导航实体或包含许多实体。
我不能做的是带有.Include().Include 的菊花链,因为我不知道要根据传入的 args 包括哪些和多少。
我想实现这一点,但我似乎无法传入逗号分隔的实体列表。有什么想法吗?
var res = db.Entity.Include(entityListCommaSeparated).Where(_=>_.ID == ID).FirstOrDefault();
【问题讨论】:
-
正如 Steve Py 下面提到的,我建议使用 lambda 表达式而不是魔术字符串来包含。如果你不得不重构,你会得到编译时错误,而不是更模糊的运行时数据库错误(或者更糟糕的是,没有错误并且没有返回包含)。
-
我无法在这种情况下使用 lambda 表达式,因为我需要在运行时根据布尔包含参数更改包含。即 15 个布尔值,默认值为 false,其中可能包括相应导航属性的任意组合。使用 2^15 (32768) 个单独的 lambda 表达式来支持所有可能的包含组合。即 GetPolicy(int id, bool includeEntityA = false, bool includeEntityB = false, ....
标签: entity-framework