entity-framework - EF 7 - 导航属性 - SQL 不正确?

标签 entity-framework entity-framework-core

EF7 是否完全支持导航属性和自定义投影?或者也许我误解了如何构建这个查询。 Study 实体具有可为空的 ProjectId 和相应的虚拟 Project 导航属性。 Project 实体具有不可为 null 的 CategoryIdCategory 导航属性。使用 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/

相关文章:

c# - 使用 EF Core 按 Id 检索实体的通用方法

c# - EF核心: inserting large amounts of data

c# - 为什么 EF Core 不设置自定义注解?

c# - 将此 C# 代码转换为 VB.NET

c# - 使用 EF Core 继承时如何避免重复属性投影?

entity-framework - 我如何将现有实体移动到不同的 c# 命名空间并维护迁移?

entity-framework - 如何在 EF Core 中实现 Select For Update

c# - Entity Framework 种子方法的依赖注入(inject)?

mysql - EF6 codefirst + MySql 迁移 : type nvarchar(max) not supported

c# - 使用与绑定(bind)不同的数据源将列动态添加到 Gridview