DbContext
数据库上下文DbContext是ObjectContext代表之一负责管理在运行时从数据库取数据、跟踪数据库的变更、对实体类映射到数据中持久化操作等,表示工作单元和存储库模式的组合,可用来查询数据库并将更改组合在一起,这些更改稍后将作为一个单元写回存储区。
1.使用原则
- 通常与DbSet<TEntity>属性的派生类型一起使用,代表要持久保存的对象。
- 若从派生上下文中调用无参数的DBContext构造函数,则可使用派生上下文的名称在配置文件中查找连接字符串,如果未找到任何连接字符串,则将名称传递给在DataBase类上注册的DefaultConnectionFactory.
- 默认情况下上下文管理连接数据库,根据需要它会打开和关闭连接
- 上下文不是线程安全的
2.生命周期
在创建实例时上下文的生命周期就开始和结束,该实例可处置或垃圾收集,所以通常使用Using关键字进行资源的释放。
3.相关操作
1) 实体框架关系定义:在Model模型层在A类中定义一个关于Virtual关键字的外键来
2) 创建代理
禁止创建代理:设置DbContext.Configuration.ProxyCreationEnabled=false;
显示创建代理实例:可延迟加载或代理跟踪
using (var context = new BloggingContext())
{var blog = context.Blogs.Create();
var admin = context.Users.Create<Administrator>();}
从代理类型获取实际实体类型:通过ObjectContext中的GetObjectType方法
using (var context = new BloggingContext())
{var blog = context.Blogs.Find(1);
var entityType = ObjectContext.GetObjectType(blog.GetType()); }
4.DBContext类的重载方法OnModelCreating方法
一个被保护的虚方法,当模型被初始化时进行的锁定配置,如:protected virtual void OnModelCreating(DbModelBuilder modelBuilder);通过该方法对数据库或数据库表进行重新配置。