c# - 使用实体框架时如何填充导航属性
问题描述
我首先使用实体框架,数据库,并且需要一个很好的解决方案来解决以下问题我有一个实体说实体框架生成的课程
class Courses
{
public Courses()
{
this.Students=new HashSet<Student>();
}
public int courseid{get;set;}
public virtual ICollection<Student> Students{get;set}
}
Class Student
{
public int id{get;set;}
public string Name{get;set;}
}
我在与这些实体类对应的业务层中创建了模型类
class Courses_Model
{
public Courses()
{
this.Students=new HashSet<Student>();
}
public int courseid{get;set;}
public virtual ICollection<Student> Students{get;set}
}
Class Student_Model
{
public int id{get;set;}
public string Name{get;set;}
}
我想从我的 web api 方法返回模型类(Courses_Model),它应该包括导航属性学生而不是
public Courses GetCourses(string id)
{
var course= (from g in con.Courses.Include("Student") where g.REQUESTER_REFERENCE == id select g).First();
return course;
}
要返回 Courses_Model 我们可以在返回时创建新的 Courses_Model 对象,但我不知道如何填充
public Courses_Model GetCourses(string id)
{
Course= con.Courses.Include("Student").Select(g => new Courses_Model{courseid=g.courseid }).Where(g => g.REQUESTER_REFERENCE == id).First();
return course;
}
解决方案
在您的投影中,您还需要实例化Student_Model
(我也建议在之后投影Where
并使用 lambda 表达式而不是字符串 for Include
):
public Courses_Model GetCourses(string id)
{
Course= con.Courses.Include(x => x.Students)
.Where(g => g.REQUESTER_REFERENCE == id)
.Select(
g => new Courses_Model
{
courseid = g.courseid,
Students = g.Students.Select(x => new Student_Model { id = x.id, Name = x.Name })
})
.First();
return course;
}
另一方面,像AutoMapper这样的库非常适合抽象这种东西。
推荐阅读
- arrays - 扩展 UITableViewCell 不读取结构元素
- excel - 如何设置 xlColumnClustered 样式,每个条形下方只有一种颜色和值?
- java - 使用 Play Framework 和 Logback 的 Java 内存泄漏
- sql - slick - 选项的动态过滤列表
- mysql - 如何在 XAMPP(Mac 版)中用 MySQL 替换 MariaDB
- javascript - 单击我的按钮重新加载另一个句子
- php - 如何修复 PHP 中的“没有这样的文件或目录错误”?
- python - 从二进制数组 [1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1] 绘制平方信号?
- python - 计算每个关键字和每个标识符的出现次数
- unity3d - 如何检查项目中是否安装了包