首页 > 解决方案 > 实体框架核心:如何包含具有空列属性的空相关实体?

问题描述

我正在开发一个使用 EF Core 和 .Net Core 的项目。

我有 2 个实体类。它们是一对多的关系。假设'学生' N <-----> 1 '等级'。

public class Student{
  public string Id {get;set;}
  public string Name {get;set;}
  public string GradeId {get;set;}
  public Grade grade {get;set;}
}

public class Grade{
  public string Id {get;set;}
  public string StudentGrade {get;set;}
}

我的 LINQ 渴望像这样加载学生

_dbcontext.Student.Include(s => s.Grade).ToList();

有时,我创建了一个“学生”记录,但我没有为它设置“等级”。结果,等级将为空。因为我使用 WebAPI 来完成这项工作,所以我需要返回嵌套的 JSON,它总是包含“Grade”及其属性,无论“Grade”是否为空。

标签: c#jsonasp.net-coreentity-framework-core

解决方案


最简单的解决方案是在物化后初始化属性:

var students = _dbcontext.Student
    .Include(s => s.Grade)
    .AsNoTracking()
    .ToList();

Grade emptyGrade = null;
foreach(var s in students)
{
   if (s.Grade == null)
   {
      emptyGrade ??= new Grade();
      s.Grade = emptyGrade;
   }
}

还有另一种自定义投影选项

var query = 
   from s in _dbcontext.Student
   select new Student
   {
       Id = s.Id,
       Name = s.Name,
       GradeId = s.GradeId,
       grade = s.grade ?? new Grade()
   };

var students = query.ToList();

推荐阅读