EF7 是否完全支持导航属性和自定义投影?或者也许我误解了如何构建这个查询。 Study
实体具有可为空的 ProjectId
和相应的虚拟 Project
导航属性。 Project
实体具有不可为 null 的 CategoryId
和 Category
导航属性。使用 ef 命令对实体进行反向搭建。
如果我运行以下查询:
return _context.Study
.Include(s => s.Project)
.ThenInclude(p => p.Category)
.Select(s => new Models.StudySearchResult
{
StudyId = s.StudyId,
MasterStudyId = s.MasterStudyId,
ShortTitle = s.ShortTitle,
Category = s.Project == null ? string.Empty : s.Project.Category.CategoryDesc,
SubmitterId = s.SubmitterId
}).ToList();
EF7 错误地生成以下 SQL,该 SQL 使用 INNER JOIN
而不是 LEFT JOIN
:
SELECT [s].[StudyId]
,[s].[MasterStudyId]
,[s].[ShortTitle]
,CASE WHEN [s].[ProjectId] IS NULL THEN @__Empty_0 ELSE [s.Project.Category].[CategoryDesc] END
,[s].[SubmitterId]
FROM [Study] AS [s]
INNER JOIN [Project] AS [s.Project]
ON [s].[ProjectId] = [s.Project].[ProjectId]
INNER JOIN [Category] AS [s.Project.Category]
ON [s.Project].[CategoryId] = [s.Project.Category].[CategoryId]
最佳答案
我也有同样的问题。我发现 EF7 中当前存在为可选导航生成 SQL 的未决问题。它将在 RC2 中修复。
https://github.com/aspnet/EntityFramework/issues/4205 https://github.com/aspnet/EntityFramework/issues/3186
关于entity-framework - EF 7 - 导航属性 - SQL 不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35352262/