2016-02-11 36 views
2

EF7是否完全支持導航屬性和自定義投影?或者,也許我誤解了如何構建這個查詢。 Study實體具有可空的ProjectId和相應的虛擬Project導航屬性。 Project實體具有不可空的CategoryIdCategory導航屬性。這些實體使用ef命令進行反向腳手架。EF 7 - 導航屬性 - 不正確的SQL?

如果我運行下面的查詢:

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,它使用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] 
+0

不專案編號構件具有在模型'[必需]'屬性? – Harsh

+0

不,研究模型(從腳手架生成)不具有「ProjectId」所需的屬性。我沒有爲DbContext檢查'OnModelCreating()'並且發現了以下配置:'entity.HasOne(d => d.Project).WithMany(p => p.Study).HasForeignKey(d => d.ProjectId); '配置爲Study,這似乎是正確的。 – TimeBomb006

回答