作为这个问题的副产品:
Proper method of navigation to generically-defined entity
关于包含抽象类型的导航属性,我面临着一个新的困境。通常情况下,我会像这样添加一个包含:
dbSet.Include(x => x.Data.Version);
使用我在上面提到的问题中使用的TPT模型,抽象导航属性Data
可以是运行时未知的派生类型的任意组合,我需要在Data
上包含特定属性取决于类型。我以为我可以在我的include表达式中使用强制转换:
dbSet.Include(x => (x.Data as SoftwareApplication).Version);
...但是EF正试图在Version
上找到x
属性,而不是x.Data
。
我知道我可以这样做的一种方法是使用Select
并将数据投影到DTO上,但我不想这样做,因为我需要开发一种动态方法来添加我的所有包含运行时使用自动生成的表达式。简而言之,我无法编写针对这一特定问题的特定的硬编码逻辑。