DbContext 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
DbContext 實例代表工作單元與儲存庫模式的組合,可用於從資料庫查詢並將變更群組,然後將這些變更寫回儲存單元。 DbContext 在概念上與 ObjectContext 相似。
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Justification="Casing is intentional")]
public class DbContext : IDisposable, System.Data.Entity.Infrastructure.IObjectContextAdapter
public class DbContext : IDisposable, System.Data.Entity.Infrastructure.IObjectContextAdapter
type DbContext = class
interface IDisposable
interface IObjectContextAdapter
Public Class DbContext
Implements IDisposable, IObjectContextAdapter
- 繼承
-
DbContext
- 衍生
- 屬性
- 實作
備註
DbContext 通常搭配包含 DbSet<TEntity> 模型根實體屬性的衍生型別一起使用。 這些集合在導出類別實例建立時會自動初始化。 此行為可透過將屬性套用至整個衍生上下文類別,或套用 SuppressDbSetInitializationAttribute 於類別上的個別屬性來修改。 支撐上下文的實體資料模型可以用多種方式來指定。 使用Code First方法時, DbSet<TEntity> 會依慣例利用衍生上下文的屬性來建立模型。 受保護的 OnModelCreating 方法可以被覆寫以調整此模型。 對於用於 Model First 方法的模型,可以透過從 明確建立 並DbCompiledModelDbModelBuilder傳遞給其中一個 DbContext 建構子來獲得更多控制。 在使用資料庫優先或模型優先方法時,實體資料模型可透過實體設計器建立(或手動建立 EDMX 檔案),然後可透過實體 連接字串 或物件EntityConnection來指定此模型。 與資料庫的連線(包括資料庫名稱)可以透過多種方式指定。 若無參數的 DbContext 建構子是從衍生上下文呼叫,則會利用該衍生上下文的名稱來尋找 app.config 或 web.config 檔案中的連接字串。 若找不到 連接字串,則該名稱會傳給類別註冊Database的 DefaultConnectionFactory。 連線工廠會將上下文名稱作為預設 連接字串 的資料庫名稱。 (此預設 連接字串 指向本地機器上的 .\SQLEXPRESS,除非註冊了不同的 DefaultConnectionFactory。)連接/資料庫名稱不使用衍生上下文名稱,也可以透過將名稱傳給取字串的 DbContext 建構子來明確指定。 名稱也可以以「name=myname」的形式傳遞,此時必須在設定檔中找到該名稱,否則會拋出例外。 請注意,app.config 或 web.config 檔案中的連線可以是一般的資料庫連接字串(而非特殊的實體框架連接字串),此時資料庫上下文將使用 Code First。 然而,如果設定檔中找到的連線是特殊的 Entity Framework 連接字串,則 DbContext 會先使用資料庫/模型,並使用該 連接字串 中指定的模型。 也可以用現有或明確建立的 DbConnection 來取代資料庫/連線名稱。 DbModelBuilderVersionAttribute A 可以套用到 DbContext 衍生的類別,以設定該上下文在建立模型時所使用的慣例版本。 若未套用屬性,則使用最新版本的慣例。
建構函式
| 名稱 | Description |
|---|---|
| DbContext() |
利用慣例建立一個新的上下文實例,建立將要連接的資料庫名稱。 慣例名稱是衍生上下文類別的全名(命名空間 + 類別名稱)。 請參閱課堂備註,了解如何利用這些方式建立連結。 |
| DbContext(DbCompiledModel) |
利用慣例建立一個新的上下文實例,建立將要連接的資料庫名稱,並從給定模型初始化資料庫。 慣例名稱是衍生上下文類別的全名(命名空間 + 類別名稱)。 請參閱課堂備註,了解如何利用這些方式建立連結。 |
| DbContext(DbConnection, Boolean) |
利用現有連線建構一個新的上下文實例,連接資料庫。
當上下文被處置時,若 |
| DbContext(DbConnection, DbCompiledModel, Boolean) |
利用現有連線建立一個新的上下文實例以連接資料庫,並從給定模型初始化。
當上下文被處置時,若 |
| DbContext(ObjectContext, Boolean) |
會圍繞現有的 ObjectContext 建構一個新的上下文實例。 |
| DbContext(ObjectContext, Boolean) |
會圍繞現有的 ObjectContext 建構一個新的上下文實例。 <param name=“objectContext”> 一個既有的 ObjectContext,用以包裝新上下文。</param><param name=“dbContextOwnsObjectContext”> 如果設定為true ObjectContext,當 DbContext 被處置時被處置,否則呼叫者必須處置該連線。</param>
|
| DbContext(String, DbCompiledModel) |
以所給字串作為資料庫的名稱或 連接字串 建構一個新的上下文實例,並從該模型初始化該實例。 請參閱課堂備註,了解如何利用這些方式建立連結。 |
| DbContext(String) |
以該字串作為資料庫名稱或 連接字串,構建一個新的上下文實例,並建立連結。 請參閱課堂備註,了解如何利用這些方式建立連結。 |
屬性
| 名稱 | Description |
|---|---|
| ChangeTracker |
提供與實體變更追蹤相關的上下文功能存取。 |
| Configuration |
提供上下文設定選項的存取。 |
| Database |
為此情境建立一個資料庫實例,允許對底層資料庫進行建立、刪除或存在檢查。 |
方法
| 名稱 | Description |
|---|---|
| Dispose() |
稱為受保護的處置方法。 |
| Dispose(Boolean) |
處理上下文。 標的 ObjectContext 資產若是在此上下文中創建,或所有權在此上下文創建時轉移至此上下文,也會被處置。 若資料庫(DbConnection 物件)是在此上下文創建,或所有權在此上下文建立時轉移至該上下文,該連結也會被處置。 |
| Entry(Object) |
取得 DbEntityEntry 該實體的物件,提供關於該實體的資訊及對該實體執行動作的能力。 |
| Entry<TEntity>(TEntity) |
取得 DbEntityEntry<TEntity> 該實體的物件,提供關於該實體的資訊及對該實體執行動作的能力。 |
| Equals(Object) |
DbContext 實例代表工作單元與儲存庫模式的組合,可用於從資料庫查詢並將變更群組,然後將這些變更寫回儲存單元。 DbContext 在概念上與 ObjectContext 相似。 |
| GetHashCode() |
DbContext 實例代表工作單元與儲存庫模式的組合,可用於從資料庫查詢並將變更群組,然後將這些變更寫回儲存單元。 DbContext 在概念上與 ObjectContext 相似。 |
| GetType() |
DbContext 實例代表工作單元與儲存庫模式的組合,可用於從資料庫查詢並將變更群組,然後將這些變更寫回儲存單元。 DbContext 在概念上與 ObjectContext 相似。 |
| GetValidationErrors() |
驗證已追蹤的實體,並回傳包含驗證結果的集合 DbEntityValidationResult 。 |
| OnModelCreating(DbModelBuilder) |
當衍生上下文的模型已初始化,但尚未鎖定並用於初始化上下文時,會呼叫此方法。 此方法的預設實作不做任何事,但可在衍生類別中覆寫,使模型在鎖定前可進一步配置。 |
| SaveChanges() |
在此情境下所做的所有變更會儲存到底層資料庫。 |
| SaveChangesAsync() |
非同步將在此情境下所做的所有變更儲存到底層資料庫。 |
| SaveChangesAsync(CancellationToken) |
非同步將在此情境下所做的所有變更儲存到底層資料庫。 |
| Set(Type) |
回傳一個非通用 DbSet 實例,用於存取上下文中給定類型的實體及底層儲存。 |
| Set<TEntity>() |
回傳 DbSet<TEntity> 一個實例,用於存取上下文中給定類型的實體及底層儲存。 |
| ShouldValidateEntity(DbEntityEntry) |
擴充點允許使用者覆寫僅驗證新增及修改實體的預設行為。 |
| ToString() |
DbContext 實例代表工作單元與儲存庫模式的組合,可用於從資料庫查詢並將變更群組,然後將這些變更寫回儲存單元。 DbContext 在概念上與 ObjectContext 相似。 |
| ValidateEntity(DbEntityEntry, IDictionary<Object,Object>) |
擴充點讓使用者自訂實體的驗證方式或過濾驗證結果。 由 GetValidationErrors() 呼叫。 |
明確介面實作
| 名稱 | Description |
|---|---|
| IObjectContextAdapter.ObjectContext |
回傳該上下文底層的 Entity Framework ObjectContext。 |