- 实体框架教程
- 实体框架 - 主页
- 实体框架 - 概述
- 实体框架 - 架构
- 实体 F - 环境设置
- 实体框架 - 数据库设置
- 实体框架 - 数据模型
- 实体框架-DbContext
- 实体框架 - 类型
- 实体框架 - 关系
- 实体框架 - 生命周期
- 实体 F - 代码优先方法
- 实体 F - 模型优先方法
- 实体 F - 数据库优先方法
- 实体框架 - DEV 方法
- 实体F——数据库操作
- 实体框架 - 并发
- 实体框架 - 事务
- 实体框架 - 视图
- 实体框架 - 索引
- 实体 F - 存储过程
- 实体 F - 断开连接的实体
- 实体 F - 表值函数
- 实体框架 - 本机 SQL
- 实体框架 - 枚举支持
- 实体F - 异步查询
- 实体框架 - 持久性
- 实体 F - 投影查询
- 实体 F - 命令记录
- 实体F——命令拦截
- 实体框架 - 空间数据类型
- 实体框架 - 继承
- 实体框架 - 迁移
- 实体框架 - 预加载
- 实体框架 - 延迟加载
- 实体框架 - 显式加载
- 实体框架 - 验证
- 实体框架 - 跟踪更改
- 实体框架 - 彩色实体
- 实体 F - 代码优先方法
- 实体框架 - 第一个示例
- 实体框架 - 数据注释
- 实体框架 - 流畅的 API
- 实体框架-种子数据库
- 实体 F - 代码优先迁移
- 实体 F - 多个 DbContext
- 实体 F - 嵌套实体类型
- 实体框架资源
- 实体框架 - 快速指南
- 实体框架 - 有用的资源
- 实体框架 - 讨论
实体框架-DbContext
实体框架使您能够使用称为实体的公共语言运行时 (CLR) 对象来查询、插入、更新和删除数据。实体框架将模型中定义的实体和关系映射到数据库。它还提供设施 -
- 将从数据库返回的数据具体化为实体对象
- 跟踪对对象所做的更改
- 处理并发
- 将对象更改传播回数据库
- 将对象绑定到控件
负责与作为对象的数据进行交互的主要类是 System.Data.Entity.DbContext。DbContext API 不作为 .NET Framework 的一部分发布。为了更加灵活和频繁地向 Code First 和 DbContext API 发布新功能,实体框架团队通过 Microsoft 的 NuGet 分发功能分发 EntityFramework.dll。
NuGet 允许您通过将相关 DLL 从 Web 直接拉入您的项目来添加对 .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将取消该实体的添加。该实体将从更改跟踪器中删除,并且 DbContext 不再跟踪该实体。对正在更改跟踪的现有实体调用删除将在下次调用 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(); } }