【发布时间】:2014-01-04 09:39:39
【问题描述】:
我使用的是 EF5,当关系为 1:N 时,如果我想加载相关实体,我会执行以下操作:
-
使用 T-SQL,我从数据库中加载具有类似 T-SQL 的主要实体:
select * from MainEntities where ... -
使用 T-SQL 我加载相关实体
select * from RelatedEntities where IDMainEntity IN (---)
此时 EF 使用相关实体填充主要实体的属性导航。另外,在dbContext中每个实体的类型的本地属性中,我拥有每种类型的所有实体。
但是,如果我对 N:N 关系执行相同操作,则我没有该关系的中间表的实体,并且当我执行查询时,我在 dbContext 的本地实体中拥有每种类型,但未填充属性导航。
我想知道为什么以及是否存在其他选择。
我使用这种方式是因为我想使用 T-SQL 来创建动态查询。如果我使用急切加载,我对动态查询的灵活性不及使用 TSQL 时的灵活性,而且效率较低。如果我使用显式加载我做N个附加查询,主实体结果中的每条记录一个用我的方式,我只附加一个查询,因为我一次得到所有相关实体。如果我使用延迟加载,我也会遇到同样的问题,另外还有 N 个查询。
当关系为 N:N 时,为什么 EF 不填充相关属性?
谢谢。
【问题讨论】:
标签: c# entity-framework-5 many-to-many