文章目录
前言
Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据。 通过 LINQ 可使用 C#(或
你选择的其他 .NET 语言)编写强类型查询。 它使用你派生得到的上下文和实体类来引用数据库对象。EF
Core 将 LINQ 查询的表示形式传递给数据库提供程序
一、数据库设计
1.1 创建数据库模型
首先建一个班级表和一个学生表,班级表和学生关系为一个班级对应多个学生即为一对多关系
1.2 数据库填写如下
1.2.1班级表如下
1.2.1班级表如下
二、实体类生成
1.生成方法见:
EntityFramework实体框架——反向工程(实体类生成)
2.生成结果:
3.查询数据
3.1 加载所有数据
using (var entityframeworktestContext = new entityframeworktestContext())
{
List<Student> students = entityframeworktestContext.Students.ToList();
Console.WriteLine(students.Count);
}
读取到的学生的数量为: 3
3.2 加载单个数据
using (var entityframeworktestContext = new entityframeworktestContext())
{
Student students = entityframeworktestContext.Students.Single(stu => stu.Id == 1);
Console.WriteLine(students.Name);
}
读取到的学生姓名为:张三
3.3 预先加载
3.3.1 数据库关联解析
预先加载加涉及到了上面设计库设置的一对多的关系,如下图在实体类生成过程中在Class类型生成了一个学生的集合即 Students,这就是数据库中描述的一个班级有多个学生的集合,那么在查询过程中首先也要去预先加载集合中的数据。
3.3.2 Include 方法
使用 Include 方法来指定要包含在查询结果中的关联数据
using (var entityframeworktestContext = new entityframeworktestContext())
{
List<Class> tmpClasses = entityframeworktestContext.Classes.Include(cl => cl.Students).ToList();
foreach (var classItem in tmpClasses)
{
foreach (var studentItem in classItem.Students)
{
Console.WriteLine(studentItem.Name);
}
}
}
运行结果:
3.4 保存数据
3.4.1基本保存
using (var entityframeworktestContext = new entityframeworktestContext())
{
Class tmpClass = new Class() {Id = 2,Name = "六年级2班"};
entityframeworktestContext.Add(tmpClass);
entityframeworktestContext.SaveChanges();
}
3.4.2 相关数据保存
using (var entityframeworktestContext = new entityframeworktestContext())
{
Class tmpClass = new Class()
{
Id = 3,
Name = "六年级3班",
Students = new List<Student>()
{
new Student{Id = 5,Age = 16,Name = "赵四" },
new Student{Id = 6,Age = 16,Name = "尼古拉斯"},
new Student{Id = 7,Age = 16,Name = "王五" }
}
};
entityframeworktestContext.Add(tmpClass);
entityframeworktestContext.SaveChanges();
}
结果:
本文档中只是罗列的经常使用的集中用法,还有很多使用方法可参考官方文档参考官方文档
总结
Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据。 通过 LINQ 可使用 C#(或你选择的其他 .NET 语言)编写强类型查询。 它使用你派生得到的上下文和实体类来引用数据库对象。 EF Core 将 LINQ 查询的表示形式传递给数据库提供程序。 反过来,数据库提供程序将其转换为数据库特定的查询语言(例如,用于关系数据库的 SQL)。 即使结果中返回的实体已存在于上下文中,也始终对数据库执行查询。