C# 实体框架核心:如何使用空列属性包含空相关实体?
我正在做一个使用EF Core和.Net Core的项目 我有两个实体类。他们是一对多的关系。让我们说‘学生’N 1‘年级’C# 实体框架核心:如何使用空列属性包含空相关实体?,c#,json,asp.net-core,entity-framework-core,C#,Json,Asp.net Core,Entity Framework Core,我正在做一个使用EF Core和.Net Core的项目 我有两个实体类。他们是一对多的关系。让我们说‘学生’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 stri
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,该JSON始终包含“Grade”及其属性,无论“Grade”是否为null。最简单的解决方案是在物化后初始化属性:
var students=\u dbcontext.Student
.包括(s=>s.等级)
.AsNoTracking()
.ToList();
等级emptyGrade=null;
foreach(学生中的var s)
{
如果(s.Grade==null)
{
清空等级???=新等级();
s、 等级=空等级;
}
}
还有另一个自定义投影选项
var查询=
来自s in_dbcontext.Student
选择新学生
{
Id=s.Id,
Name=s.Name,
GradeId=s.GradeId,
等级=标准等级??新等级()
};
var students=query.ToList();
var emptyGrade=new Grade()?或者var emptyGrade=newgrade{StudentGrade=“No Grade”}@谢尔盖:为什么要引入不必要的分配?我喜欢这个答案@MTLC,我认为这个答案的一个关键点是,为JSON塑造对象并不是一个真正的EF(存储)问题,可以在读取EF对象后完成,这有助于保持层分离。foreach(var s in students)s.Grade???=new Grade()
就足够了。