📜  Entity Framework-DbContext

📅  最后修改于: 2020-11-21 07:14:50             🧑  作者: Mango


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

  • 将数据库返回的数据具体化为实体对象
  • 跟踪对对象所做的更改
  • 处理并发
  • 将对象更改传播回数据库
  • 绑定对象到控件

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

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

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

DbContext

  • DbContext API主要旨在简化与Entity Framework的交互。

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

  • 在早期版本的Entity Framework中,这些任务通常很难发现和编码。

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

定义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相似,并且在所有开发模型(例如代码优先,模型优先和数据库优先)中有用且容易。

查询

您可以使用三种查询,例如-

  • 添加一个新实体。
  • 更改或更新现有实体的属性值。
  • 删除现有实体。

添加新实体

使用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一样简单。在以下代码中,阿里的姓氏已从“汗”更改为“阿斯兰”。

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方法。删除适用于现有实体和新添加的实体。对已添加但尚未保存到数据库的实体调用“删除”将取消该实体的添加。该实体已从更改跟踪器中删除,并且不再由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();
   }
}