Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架核心:如何使用空列属性包含空相关实体?_C#_Json_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 实体框架核心:如何使用空列属性包含空相关实体?

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

我正在做一个使用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 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()
就足够了。