开发手册 欢迎您!
软件开发者资料库

Entity Framework - DbContext

Entity Framework DbContext - 从概述,体系结构,环境设置,数据库设置,数据模型,DbContext,类型,关系,生命周期,代码优先方法,模型优先方法,数据库优先方法,DEV方法,数据库操作,并发,开始学习实体框架事务,视图,索引,存储过程,断开连接的实体,表值函数,本机SQL,枚举支持,异步查询,持久性,投影查询,命令记录,命令拦截,空间数据类型,继承,迁移,渴望,懒惰,显式加载,验证,跟踪更改,彩色实体,第一个示例,数据注释,Fluent API,种子数据库,代码优先迁移,多个DbContext,嵌套实体类型。

使用实体框架,您可以使用称为实体的公共语言运行时(CLR)对象来查询,插入,更新和删除数据.实体框架将模型中定义的实体和关系映射到数据库.它还为&提供设施;

  • 将数据库中返回的数据实体化为实体对象

  • 跟踪对对象所做的更改

  • 处理并发性

  • 将对象更改传播回数据库

  • 将对象绑定到控件

负责与数据作为对象进行交互的主类是System.Data.Entity.DbContext. DbContext API不作为.NET Framework的一部分发布.为了更灵活和频繁地向Code First和DbContext API发布新功能,Entity Framework团队通过Microsoft的NuGet分发功能分发EntityFramework.dll.

  • NuGet允许您通过将相关的DLL直接从Web中提取到项目中来添加对.NET项目的引用.

  • 一个名为Library Package Manager的Visual Studio扩展提供了一种简单的方法,可以将适当的程序集从Web中提取到项目中.

DbContext

  • DbContext API主要用于简化您与实体框架的交互.

  • 它还减少了访问常用任务所需的方法和属性数量.

  • 在以前版本的Entity Framework中,这些任务通常很复杂over和code.

  • 上下文类在运行时管理实体对象,包括使用数据库中的数据填充对象,更改跟踪以及将数据持久化到数据库.

定义DbContext派生类

使用上下文的推荐方法是定义一个派生自DbContext的类,并公开表示上下文中指定实体的集合的DbSet属性.如果您正在使用EF Designer,将为您生成上下文.如果您正在使用Code First,您通常会自己编写上下文.

以下代码是一个简单示例,显示UniContext派生自DbContext.

  • 您可以对DbSet使用自动属性,例如getter和setter.

  • 它还使代码更清晰,但是当你没有其他逻辑可以应用时,你不需要使用它来创建DbSet.

public class UniContext : DbContext {   public UniContext() : base("UniContext") { }   public DbSet Students { get; set; }   public DbSet Enrollments { get; set; }   public DbSet Courses { get; set; }}

  • 以前,EDM用于生成派生的上下文类来自ObjectContext类.

  • 使用ObjectContext有点复杂.

  • DbContext ObjectContext的包装器实际上类似于ObjectContext,在所有开发模型中都很有用,如Code First,Model First和Database First.

查询

您可以使用三种类型的查询,例如 :

  • 添加新实体.

  • 更改或更新现有实体的属性值.

  • 删除现有实体.

添加新实体

使用Entity Framework添加新对象就像构建对象的新实例并使用它注册一样简单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();      }   }}

删除现有实体

要使用Entity Framework删除实体,请在DbSet上使用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();   }}