实体框架核心:如何包括一个空相关的实体与它的空列属性?



我正在做一个使用EF Core和。net Core的项目。

我有两个实体类。它们是一对多关系。假设是'Student' 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;}
}

My LINQ to eager load student like this

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

有时,我创建一个"Student"记录,但我没有创造"成绩"。为它。因此,Grade将为null。由于我使用WebAPI来完成这项工作,我需要返回嵌套的JSON,其中总是包含"Grade"及其性质是否"等级";

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

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();

最新更新