DbContext 類別

[此頁面專屬於 Entity Framework 第 6 版。最新版本可從 'Entity Framework' NuGet 套件取得。如需 Entity Framework 的詳細資訊,請參閱 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 為此內容建立 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 可讓使用者覆寫只驗證 Added 和 Modified 實體之預設行為的擴充點。
公用方法 ToString 傳回 DbContext 的字串表示法。 (覆寫 Object.ToString()。)
受保護的方法 ValidateEntity 可讓使用者自訂實體驗證或篩選出驗證結果的擴充點。由 GetValidationErrors() 呼叫。

靠上

明確介面實作

  名稱 描述
明確介面實作私用屬性 IObjectContextAdapter.ObjectContext 傳回在此內容底層的 Entity Framework ObjectContext。

靠上

備註

DbContext 通常會搭配衍生類型使用,該類型包含模型根實體的 DbSet<TEntity> 屬性。 當建立衍生類別的執行個體時,這些集合會自動初始化。 可以修改此行為,方法是將 SuppressDbSetInitializationAttribute 屬性 (Attribute) 套用到整個衍生內容類別或是此類別的個別屬性 (Property)。 支援此內容的實體資料模型可以使用幾個方式來指定。 當使用 Code First 方法時,衍生內容上的 DbSet<TEntity> 屬性會用來依照慣例建立模型。 可覆寫受保護的 OnModelCreating 方法來調整此模型。 如果想要對 Model First 方法所使用的模型擁有更多控制權,請從 DbModelBuilder 明確建立 DbCompiledModel,並將此模型傳遞給其中一個 DbContext 建構函式。 當使用 Database First 或 Model First 方法時,可以使用 Entity Designer 建立實體資料模型 (或是藉由手動建立 EDMX 檔案),然後可以使用實體連接字串或 EntityConnection 物件指定此模型。 可以使用幾個方法來指定資料庫的連接 (包括資料庫的名稱)。 如果從衍生內容呼叫無參數的 DbContext 建構函式,則會使用衍生內容的名稱在 app.config 或 web.config 檔案中尋找連接字串。 如果找不到連接字串,則會將此名稱傳遞給 Database 類別上註冊的 DefaultConnectionFactory。 然後連接工廠會使用此內容名稱當做預設連接字串中的資料庫名稱 (此預設連接字串會指向 本機電腦上的 .\SQLEXPRESS,除非註冊了不同的 DefaultConnectionFactory)。如果不要使用衍生的內容名稱,也可以明確指定連接/資料庫名稱,方法是將此名稱傳遞給其中一個採用字串的 DbContext 建構函式。 也可以使用 "name=myname" 格式傳遞名稱,這樣必須在組態檔中找到此名稱,否則將會擲回例外狀況。 請注意,app.config 或 web.config 檔案中找到的連接可以是一般資料庫連接字串 (不是特殊的 Entity Framework 連接字串),此時 DbContext 將會使用 Code First。 但是,如果組態檔中找到的連接是特殊的 Entity Framework 連接字串,則 DbContext 將會使用 Database/Model First,而且會使用連接字串中指定的模型。 也可以使用現有或明確建立的 DbConnection 來取代資料庫/連接名稱。 DbModelBuilderVersionAttribute 可以套用至衍生自 DbContext 的類別,以便在建立模型時設定此內容所使用的慣例版本。 如果未套用任何屬性,則會使用最新版本的慣例。

執行緒安全

這個類型的任何 Public static (在 Visual Basic 中為 Shared) 成員都是安全執行緒。並非所有的執行個體成員都是安全執行緒。

請參閱

參考

System.Data.Entity 命名空間