DBContext と ObjectContext の主な違いは、DBContext は ObjectContext のラッパーであり、ObejctContext の最もよく使われる機能を示すのに対し、ObejctContext は Entity Framework のコア API の一部で、強く型付けされたエンティティクラスを使ってデータベースに対して操作を実行できることです。
一般的に、アプリケーションとデータベースを接続することが必要です。
プログラマは、どのようなプログラミング言語でもアプリケーションを開発することができます。
しかし、ほとんどのプログラミング言語では、データベースと連動するためのメソッドをライブラリとして提供していますが、その作業は困難です。
なぜなら、プログラムにはオブジェクトがありますが、データベースに対して操作を行うにはSQLクエリが必要だからです。
この問題を解決する方法として、Entity Frameworkを使用する方法があります。
Entity FrameworkはObject Relational Mapper(ORM)であり、プログラマーが.NETアプリケーションのオブジェクトをリレーショナルデータベースのテーブルとカラムにマッピングできるようにする。
全体として、DBContextとObjectContextは、Entity Frameworkに関連する2つの概念です。
DBContextとは
DBContext は、ObjectContext の軽量な代替品です。
言い換えれば、ObjectContext のラッパーです。
プログラマーは、データベースファースト、コードファースト、モデルファーストの開発アプローチでDbContextを使用することができます。
しかも、DBContextは主に使いやすいAPI集で構成されている。
そして、ObejctContextは、これらのAPIを公開するのに役立つ。
また、これらのAPIにより、プログラマはObejctContextが許さないコードファーストのアプローチを使用することができるようになります。
ObejctContext って何?
ObjectContext は、データベース接続やEntity モデルの異なるエンティティの管理など、データベース操作を管理するために使用されるクラスです。
言い換えれば、ObejctContext は、概念モデルで定義されたエンティティにアクセスして作業するための基本または主要なクラスです。
さらに、ObjectContextは、データソース(またはデータベース)への接続、Entity Data Model(EDM)のメタデータ、およびオブジェクトに加えられた変更を監視するObject State Managerで構成される。
全体として、ObjectContextは複数のタスクを実行する。
第一に、データベース接続を処理する。
次に、追加、更新、削除を行うための組み込み機能で構成されている。
さらに、保留中の変更の状態を提供し、エンティティに加えられた変更を保存する。
DBContext と ObjectContext の違い
定義
DBContext は ObjectContext のラッパーであり、ObjectContext の最も一般的に使用される機能を公開する。
一方、ObjectContext は、Entity framework API のコアのクラスで、強く型付けされたエンティティクラスを使用して、データベースに対して行われたクエリの実行と更新の追跡を可能にするものである。
したがって、ここがDBContextとObjectContextの主な違いです。
準拠クエリ
ただし、DBContext は Compiled Queries をサポートしていませんが、ObjectContext は Compiled Queries をサポートしています。
したがって、この点も DBContext と ObjectContext の違いとなります。
エンティティのトラッキング/モニタリング
また、DBContextはEntityの自己追跡をサポートしないが、ObjectContextはEntityの自己追跡をサポートする。
フレームワーク
また、Entity Framework 4.1 以上では DBContext を使用でき、Entity Framework 4.0 以下では ObjectConext を使用することができます。
アプローチ
なお、DBContextは、モデルファースト、データベースファースト、コードファーストの各アプローチで使用される。
一方、ObjectContextは、モデルファースト、データベースファーストのアプローチでのみ使用されます。
スレッドの安全性
また、DBContext と ObjectContext のもう一つの違いは、DBContext は public static および shared メンバに対してスレッドセーフを提供するのに対し、ObjectContext はスレッドセーフを提供しないことである。
結論
全体として、DBContext と ObjectContext は、データをオブジェクトとして問い合わせたり、操作したりする機能を提供します。
DBContext と ObjectContext の主な違いは、DBContext は ObjectContext のラッパーであり、ObejctContext の最もよく使われる機能を示すのに対し、ObejctContext は Entity Framework API のコア部分であり、強く型付けされたエンティティクラスを使ってデータベース上で操作を実行できるようにすることである。
簡単に言えば、DBContextとObjectContextは概念的に類似していると考えることができます。