- 实体框架教程
- 实体框架 - 首页
- 实体框架 - 概述
- 实体框架 - 架构
- 实体框架 - 环境设置
- 实体框架 - 数据库设置
- 实体框架 - 数据模型
- 实体框架 - DbContext
- 实体框架 - 类型
- 实体框架 - 关系
- 实体框架 - 生命周期
- 实体框架 - 代码优先方法
- 实体框架 - 模型优先方法
- 实体框架 - 数据库优先方法
- 实体框架 - 开发方法
- 实体框架 - 数据库操作
- 实体框架 - 并发
- 实体框架 - 事务
- 实体框架 - 视图
- 实体框架 - 索引
- 实体框架 - 存储过程
- 实体框架 - 断开连接的实体
- 实体框架 - 表值函数
- 实体框架 - 本机SQL
- 实体框架 - 枚举支持
- 实体框架 - 异步查询
- 实体框架 - 持久化
- 实体框架 - 投影查询
- 实体框架 - 命令日志
- 实体框架 - 命令拦截
- 实体框架 - 空间数据类型
- 实体框架 - 继承
- 实体框架 - 迁移
- 实体框架 - 渴望加载
- 实体框架 - 延迟加载
- 实体框架 - 显式加载
- 实体框架 - 验证
- 实体框架 - 跟踪更改
- 实体框架 - 彩色实体
- 实体框架 - 代码优先方法
- 实体框架 - 第一个示例
- 实体框架 - 数据注释
- 实体框架 - Fluent API
- 实体框架 - 填充数据库
- 实体框架 - 代码优先迁移
- 实体框架 - 多个DbContext
- 实体框架 - 嵌套实体类型
- 实体框架资源
- 实体框架 - 快速指南
- 实体框架 - 有用资源
- 实体框架 - 讨论
实体框架 - DbContext
实体框架使您能够使用称为实体的公共语言运行时 (CLR) 对象查询、插入、更新和删除数据。实体框架将模型中定义的实体和关系映射到数据库。它还提供以下功能:
- 将从数据库返回的数据具体化为实体对象
- 跟踪对对象进行的更改
- 处理并发
- 将对象更改传播回数据库
- 将对象绑定到控件
负责以对象形式与数据交互的主要类是 System.Data.Entity.DbContext。DbContext API 并非作为 .NET Framework 的一部分发布。为了能够更灵活、更频繁地向 Code First 和 DbContext API 发布新功能,实体框架团队通过 Microsoft 的 NuGet 分发功能分发 EntityFramework.dll。
NuGet 允许您通过从 Web 直接将相关的 DLL 拉入您的项目来向您的 .NET 项目添加引用。
一个名为库包管理器 Visual Studio 扩展提供了一种简单的方法,可以将合适的程序集从 Web 拉入您的项目。
DbContext API 主要针对简化与实体框架的交互。
它还减少了您需要访问的用于执行常用任务的方法和属性的数量。
在早期版本的实体框架中,这些任务通常难以发现和编码。
上下文类在运行时管理实体对象,包括使用来自数据库的数据填充对象、更改跟踪以及将数据持久化到数据库。
定义 DbContext 派生类
使用上下文的首选方法是定义一个从 DbContext 派生的类,并公开表示上下文中指定实体集合的 DbSet 属性。如果您正在使用 EF 设计器,则会为您生成上下文。如果您使用的是 Code First,则通常会自己编写上下文。
以下代码是一个简单的示例,它显示 UniContext 是从 DbContext 派生的。
您可以将自动属性与 DbSet 一起使用,例如 getter 和 setter。
它还使代码更加简洁,但在您没有其他逻辑要应用的情况下,您不需要将其用于创建 DbSet 的目的。
public class UniContext : DbContext { public UniContext() : base("UniContext") { } public DbSet<Student> Students { get; set; } public DbSet<Enrollment> Enrollments { get; set; } public DbSet<Course> Courses { get; set; } }
以前,EDM 用于生成从 ObjectContext 类派生的上下文类。
使用 ObjectContext 稍微复杂一些。
DbContext 是 ObjectContext 的一个包装器,它实际上类似于 ObjectContext,并且在所有开发模型(如 Code First、Model First 和 Database First)中都非常有用且易于使用。
查询
您可以使用三种类型的查询,例如:
- 添加新实体。
- 更改或更新现有实体的属性值。
- 删除现有实体。
添加新实体
使用实体框架添加新对象就像构造对象的实例并使用 DbSet 上的 Add 方法注册它一样简单。以下代码用于将新学生添加到数据库。
private static void AddStudent() { using (var context = new UniContext()) { var student = new Student { LastName = "Khan", FirstMidName = "Ali", EnrollmentDate = DateTime.Parse("2005-09-01") }; context.Students.Add(student); context.SaveChanges(); } }
更改现有实体
更改现有对象就像更新分配给您想要更改的属性的值并调用 SaveChanges 一样简单。在以下代码中,Ali 的姓氏已从 Khan 更改为 Aslam。
private static void AddStudent() { private static void ChangeStudent() { using (var context = new UniContext()) { var student = (from d in context.Students where d.FirstMidName == "Ali" select d).Single(); student.LastName = "Aslam"; context.SaveChanges(); } } }
删除现有实体
要使用实体框架删除实体,您可以在 DbSet 上使用 Remove 方法。Remove 适用于现有实体和新添加的实体。对已添加但尚未保存到数据库的实体调用 Remove 将取消实体的添加。该实体将从更改跟踪器中删除,并且 DbContext 不再跟踪该实体。对正在更改跟踪的现有实体调用 Remove 将在下次调用 SaveChanges 时注册该实体以进行删除。以下示例显示了从数据库中删除名为 Ali 的学生的实例。
private static void DeleteStudent() { using (var context = new UniContext()) { var bay = (from d in context.Students where d.FirstMidName == "Ali" select d).Single(); context.Students.Remove(bay); context.SaveChanges(); } }