DBContext
阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买
如您所见在前面 创建实体数据模型 节中,EDM产生了一个派生自System.Data.Entity.DbContext的SchoolDBEntities类,如下所示。 派生的类DbContext称为实体框架的上下文类。 EntityFramework 4.1之前,EDM生成的上下文类派生自ObjectContext类。 使用ObjectContext稍微有点棘手, DbContext在概念上与ObjectContext类似。 它是在ObjectContext上包装起来并且适合所有的开发模式:Code First, Model First and Database First。 DbContext是实体框架的一个重要组成部分。 他是一个域或实体类和数据库之间的桥梁。 DbContext主要负责与数据交互。 DbContext负责以下活动: EntitySet: DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)。 查询: DbContext 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。 更改跟踪: 它跟踪每个实体从数据库中查询出来后发生的修改变化。 持久化数据: 它也基于实体状态执行插入、更新和删除操作到数据库中。 缓存: DbContext默认第一级缓存。 对象实例化: DbContext将原始表数据转换成实体对象。 下面是在前面的课程中生成的一个例子SchoolDBEntities类(上下文类派生DbContext) namespace EFTutorials { using System; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Data.Entity.Core.Objects; using System.Linq; public partial class SchoolDBEntities : DbContext { public SchoolDBEntities() : base("name=SchoolDBEntities") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } public virtual DbSet<Course> Courses { get; set; } public virtual DbSet<Standard> Standards { get; set; } public virtual DbSet<Student> Students { get; set; } public virtual DbSet<StudentAddress> StudentAddresses { get; set; } public virtual DbSet<Teacher> Teachers { get; set; } public virtual DbSet<View_StudentCourse> View_StudentCourse { get; set; } public virtual ObjectResult<GetCoursesByStudentId_Result> GetCoursesByStudentId(Nullable<int> studentId) { var studentIdParameter = studentId.HasValue ? new ObjectParameter("StudentId", studentId) : new ObjectParameter("StudentId", typeof(int)); return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<GetCoursesByStudentId_Result>("GetCoursesByStudentId", studentIdParameter); } public virtual int sp_DeleteStudent(Nullable<int> studentId) { var studentIdParameter = studentId.HasValue ? new ObjectParameter("StudentId", studentId) : new ObjectParameter("StudentId", typeof(int)); return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_DeleteStudent", studentIdParameter); } public virtual ObjectResult<Nullable<decimal>> sp_InsertStudentInfo(Nullable<int> standardId, string studentName) { var standardIdParameter = standardId.HasValue ? new ObjectParameter("StandardId", standardId) : new ("StandardId", typeof(int)); var studentNameParameter = studentName != null ? new ObjectParameter("StudentName", studentName) : new ObjectParameter("StudentName", typeof(string)); return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<decimal>>("sp_InsertStudentInfo", standardIdParameter, studentNameParameter); } public virtual int sp_UpdateStudent(Nullable<int> studentId, Nullable<int> standardId, string studentName) { var studentIdParameter = studentId.HasValue ? new ObjectParameter("StudentId", studentId) : new ObjectParameter("StudentId", typeof(int)); var standardIdParameter = standardId.HasValue ? new ObjectParameter("StandardId", standardId) : new ObjectParameter("StandardId", typeof(int)); var studentNameParameter = studentName != null ? new ObjectParameter("StudentName", studentName) : new ObjectParameter("StudentName", typeof(string)); return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_UpdateStudent", studentIdParameter, standardIdParameter, studentNameParameter); } } } 正如你在上面的例子中所看到的,上下文类(SchoolDBEntities)包括所有实体的实体组类型DbSet < TEntity >。 它还包括EDM所包含的存储过程和视图的执行函数。 上下文类覆盖OnModelCreating方法。 可以用来在Code-first开始模式中配置实体。 实例化DbContext您可以通过实例化上下文类来使用DbContext做一些CRUD操作,如下所示。 using (var ctx = new SchoolDBEntities()) { //Can perform CRUD operation using ctx here.. } 从DbContext获取到ObjectContextDBContext API比ObjectContext API在常规操作上更容易使用。 然而,如果你想要使用ObjectContext的一些特性,你可以从DBContext获取ObjectContext的引用。可以通过IObjectContextAdpter 来获取。 using (var ctx = new SchoolDBEntities()) { var objectContext = (ctx as System.Data.Entity.Infrastructure.IObjectContextAdapter).ObjectContext; //use objectContext here.. } EDM还生成了实体类。 在下一章我们将了解不同类型的实体。
版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境 本文地址:http://www.yuanjiaocheng.net/entity/dbcontext.html |