c# - 实体框架核心:如何包含具有空列属性的空相关实体?
问题描述
我正在开发一个使用 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”是否为空。
解决方案
最简单的解决方案是在物化后初始化属性:
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();
推荐阅读
- python - 目录中没有文件的Python导入包?
- java - 将 tess4j 依赖项添加到 pom.xml 时出现 java.lang.module.ResolutionException
- ruby-on-rails - 使用关联的 Rails 嵌套类别列表(父>子)
- python - 如何在python中根据阈值绘制值计数图
- batch-file - 在 .bat 脚本中处理重音符号
- python - Python多处理,变量的预初始化
- sql - 如何使用sql将一个表中的多个列更新到另一个表。
- matlab - 在 Matlab 中,A(1) 是什么意思?如果 A 是矩阵
- amazon-web-services - 如何解决 AWS 微服务的 Rate Exceed 错误?
- jmeter - 当我导航到 JMter 中的单个页面时,视图结果树显示单个页面的三个隔离。请协助