在我正在处理的遗留系统中,每个表格都通过一个名为
请注意,连接的
在EF中,我尝试过:
它可以工作,但会急切地加载所有活动和非活动的部分。
我还尝试了这个:
但它会抛出运行时异常;看起来EF不喜欢在
IsActive
的标志支持软删除。如何使用Entity Framework的Include
方法进行急切加载,但仅急切加载活动(未软删除)的表格子集,而不是全部加载。
示例:
考虑两个表格Document
和Section
,其中一个Document
包含一组Section
,我想要急切地加载已激活(未软删除)的Section
。这是SqlFiddle中的一个模式。
在SQL中,我可以通过以下查询实现此目的:
SELECT
D.*, S.*
FROM
Document D
INNER JOIN Section S ON S.DocumentId = D.Id AND S.IsActive = 1
WHERE D.IsActive = 1
请注意,连接的
ON
子句和WHERE
子句中都需要检查活动标志。在EF中,我尝试过:
_context.Set<Document>()
.Include(d => d.Sections)
.All(d => d.IsActive);
它可以工作,但会急切地加载所有活动和非活动的部分。
我还尝试了这个:
_context.Set<Document>()
.Include(d => d.Sections.Where(sec => sec.IsActive))
.All(d => d.IsActive);
但它会抛出运行时异常;看起来EF不喜欢在
Include
内部使用Where
。我正在使用Entity Framework 6。
Document
д»Қе°ҶеҢ…еҗ«дёҖз»„жҙ»еҠЁе’Ңйқһжҙ»еҠЁйғЁеҲҶгҖӮйҷӨйқһжҲ‘д»Ҙжҹҗз§Қж–№ејҸе°Ҷanonymous.Sections
еҲҶй…Қз»ҷanonymous.Document.Sections
гҖӮ - Sina Iravanian