DbContext 类

[本页针对的是实体框架版本 6。最新版本以“实体框架”NuGet 包的形式提供。有关实体框架的更多信息,请参见 msdn.com/data/ef。]

DbContext 实例表示工作单元和存储库模式的组合,可用来查询数据库并将更改组合在一起,这些更改稍后将作为一个单元写回存储区中。 DbContext 在概念上与 ObjectContext 类似。

继承层次结构

System.Object
  System.Data.Entity.DbContext
    System.Data.Entity.Infrastructure.TransactionContext
    System.Data.Entity.Migrations.History.HistoryContext

命名空间:  System.Data.Entity
程序集:  EntityFramework(在 EntityFramework.dll 中)

语法

声明
Public Class DbContext _
    Implements IDisposable, IObjectContextAdapter
用法
Dim instance As DbContext
public class DbContext : IDisposable, IObjectContextAdapter
public ref class DbContext : IDisposable, 
    IObjectContextAdapter
type DbContext =  
    class 
        interface IDisposable 
        interface IObjectContextAdapter 
    end
public class DbContext implements IDisposable, IObjectContextAdapter

DbContext 类型公开以下成员。

构造函数

  名称 描述
受保护的方法 DbContext() 使用约定构造一个新的上下文实例以创建将连接到的数据库的名称。按照约定,该名称是派生上下文类的全名(命名空间与类名称的组合)。请参见有关这如何用于创建连接的类备注。
公共方法 DbContext(String) 可以将给定字符串用作将连接到的数据库的名称或连接字符串来构造一个新的上下文实例。请参见有关这如何用于创建连接的类备注。
受保护的方法 DbContext(DbCompiledModel) 使用约定构造一个新的上下文实例以创建将连接到的数据库的名称,并从给定模型初始化该名称。按照约定,该名称是派生上下文类的全名(命名空间与类名称的组合)。请参见有关这如何用于创建连接的类备注。
公共方法 DbContext(DbConnection, Boolean) 通过现有连接来连接到数据库以构造一个新的上下文实例。如果 contextOwnsConnection 是 false,则释放上下文时将不会释放该连接。
公共方法 DbContext(String, DbCompiledModel) 可以将给定字符串用作将连接到的数据库的名称或连接字符串来构造一个新的上下文实例,并从给定模型初始化该实例。请参见有关这如何用于创建连接的类备注。
公共方法 DbContext(ObjectContext, Boolean) 围绕现有 ObjectContext 构造一个新的上下文实例。
公共方法 DbContext(DbConnection, DbCompiledModel, Boolean) 通过使用现有连接来连接到数据库以构造一个新的上下文实例,并从给定模型初始化该实例。如果 contextOwnsConnection 是 false,则释放上下文时将不会释放该连接。

顶部

属性

  名称 描述
公共属性 ChangeTracker 提供对用于处理实体的更改跟踪的上下文功能的访问。
公共属性 Configuration 提供对上下文的配置选项的访问。
公共属性 Database 为此上下文创建一个数据库实例,该上下文允许您对基础数据库执行创建/删除/存在性检查操作。

顶部

方法

  名称 描述
公共方法 Dispose() 调用受保护的 Dispose 方法。
受保护的方法 Dispose(Boolean) 释放上下文。在以下情况下也将释放基础 ObjectContext:它由此上下文创建,或者在创建此上下文时将所有权传递给了此上下文。在以下情况下也将释放与数据库的连接(DbConnection 对象):它由此上下文创建,或者在创建此上下文时将所有权传递给了此上下文。
公共方法 Entry(Object) 获取给定实体的 DbEntityEntry 对象,以便提供对与该实体有关的信息的访问以及对实体执行操作的功能。
公共方法 Entry<TEntity>(TEntity) 获取给定实体的 DbEntityEntry<TEntity> 对象,以便提供对与该实体有关的信息的访问以及对实体执行操作的功能。
公共方法 Equals 确定指定的 DbContext 是否等于当前 DbContext。 (重写 Object.Equals(Object)。)
受保护的方法 Finalize (继承自 Object。)
公共方法 GetHashCode 返回此 DBContext 的哈希函数。 (重写 Object.GetHashCode()。)
公共方法 GetType 返回当前 DbContext 的类型。
公共方法 GetValidationErrors 验证跟踪实体,并返回包含验证结果的 DbEntityValidationResult 的集合。
受保护的方法 MemberwiseClone (继承自 Object。)
受保护的方法 OnModelCreating 在完成对派生上下文的模型的初始化后,并在该模型已锁定并用于初始化上下文之前,将调用此方法。虽然此方法的默认实现不执行任何操作,但可在派生类中重写此方法,这样便能在锁定模型之前对其进行进一步的配置。
公共方法 SaveChanges 将在此上下文中所做的所有更改保存到基础数据库。
公共方法 SaveChangesAsync() 将在此上下文中所做的所有更改异步保存到基础数据库。
公共方法 SaveChangesAsync(CancellationToken) 将在此上下文中所做的所有更改异步保存到基础数据库。
公共方法 Set(Type) 针对对上下文和基础存储中给定类型的实体的访问返回一个非泛型 DbSet 实例。
公共方法 Set<TEntity>() 针对对上下文和基础存储中给定类型的实体的访问返回一个 DbSet<TEntity> 实例。
受保护的方法 ShouldValidateEntity 扩展点允许用户重写仅验证添加的实体和修改的实体的默认行为。
公共方法 ToString 返回 DbContext 的字符串表示形式。 (重写 Object.ToString()。)
受保护的方法 ValidateEntity 扩展点允许用户自定义实体的验证或筛选出验证结果。由 GetValidationErrors() 调用。

顶部

显式接口实现  

  名称 描述
显式接口实现私有属性 IObjectContextAdapter.ObjectContext 返回基础化此上下文的实体框架 ObjectContext。

顶部

备注

DbContext 通常将与包含模型的根实体的 DbSet<TEntity> 属性的派生类型一起使用。 在创建派生类的实例时,自动初始化这些集。 可以通过将 SuppressDbSetInitializationAttribute 特性应用于整个派生上下文类或该类上的单个属性来修改此行为。 可通过多种方法指定支持上下文的实体数据模型。 在使用 Code First 方法时,派生上下文上的 DbSet<TEntity> 属性将用于按约定生成模型。 可重写受保护的 OnModelCreating 方法来修改此模型。 通过从 DbModelBuilder 显式创建 DbCompiledModel 并将此模型传递给 DbContext 构造函数之一,可以获取对用于 Model First 方法的模型的更精细的控制。 在使用 Database First 或 Model First 方法时,可使用实体设计器(或通过手动创建 EDMX 文件)来创建实体数据模型,然后可使用实体连接字符串或 EntityConnection 对象来指定此模型。 可通过多种方法指定与数据库的连接(包括数据库的名称)。 如果从派生上下文中调用无参数的 DbContext 构造函数,则可使用派生上下文的名称在 app.config 或 web.config 文件中查找连接字符串。 如果未找到任何连接字符串,则将名称传递给在 Database 类上注册的 DefaultConnectionFactory。 然后,连接工厂会在默认连接字符串中将上下文名称用作数据库名称。 (此默认连接字符串指向本地计算机上的 . \SQLEXPRESS,除非注册一个不同的 DefaultConnectionFactory。)作为使用派生上下文名称的替代,还可通过将连接/数据库名称传递给采用一个字符串的 DbContext 构造函数之一来显式指定该名称。 还可以“name=myname”的形式传递名称,在此情况下,必须在 config 文件中找到该名称,否则将引发异常。 请注意在 app.config 或 web.config 文件中找到的连接可以是一个常规数据库连接字符串(而非特殊的实体框架连接字符串),在此情况下,DbContext 将使用 Code First。 但是,如果在配置文件中找到的连接是一个特殊的实体框架连接字符串,则 DbContext 将使用 Database First 或 Model First,并且将使用连接字符串中指定的模型。 还可使用现有的或显式创建的 DbConnection 来代替数据库/连接名称。 可将 DbModelBuilderVersionAttribute 应用于派生自 DbContext 的类以设置创建模型时上下文所使用的约定版本。 如果未应用任何特性,则将使用约定的最新版本。

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

请参阅

参考

System.Data.Entity 命名空间