2011-03-30 13 views
0

をオブジェクトにEntity Frameworkの4つのオブジェクトの比較、私は実際には2つの質問があります。ADO.NET C#POCOエンティティジェネレータは

  1. をEntity FrameworkのエンティティオブジェクトとADO.NET C#POCOエンティティ間の違いは何ですか。
  2. 以下の正しいリポジトリを使用してレコードを更新していますか?

コード生成をオフにしてからADO.NET C# POCO Entity Generatorを追加すると、Entity Framework 4オブジェクトの素敵なクラス表現が提供されます。

The POCO Template can be used to generate persistence ignorant entity types 
from an Entity Data Model. 

しかし、これらのオブジェクトは、オブジェクト間の関係だけでなく、バ​​ックデータベースへのリンクを持っている:アイデアは(from here)ということです。たとえば、リポジトリから1つを取り出して変更し、リポジトリまたは作業単位レベルで変更を保存し、その内容をデータベースに保存することができます。

私の質問は、ネイティブのEntity Frameworkオブジェクトと、このツールを使用して生成されたこれらのPOCOの違いは何ですか?

これは、リポジトリを使用してレコードを更新すると思います。これは間違っていますか?

  1. リポジトリからPOCOをリクエストします。
  2. リポジトリはデータコンテキストからレコードをロードし、見つかったレコードごとに新しいPOCOを作成し、Entity Frameworkオブジェクトの値をPOCOにコピーし、新しいPOCOのコレクションを返します。
  3. これらのPOCOがリポジトリ外で変更された場合、POCOは保存(POCO)のようなものを使用してリポジトリに戻されます。
  4. リポジトリは、データベースから一致するレコードをロードし、POCOプロパティをEntity Frameworkオブジェクトにコピーします。
  5. 1回の呼び出しリポジトリオブジェクトまたは作業単位オブジェクトを使用して保存します。

答えて

1

POCOは、永続性に関連する特殊な構造によって汚染されていない単純な古いCLRクラスを持つことを意味します。エンティティオブジェクトはEntityObjectクラスから派生し、エンティティフレームワークに直接関連する多くのクラスと属性を使用します。 EntityObjectsを使用する場合、エンティティフレームワークに完全に依存するコードになります。

あなたのリポジトリに記述したものが、POCOアプローチを達成するためにEFv1で使用されました。現在、POCOを直接使用することができます。 POCOはデータベースとの関係はありません。いくつかのシナリオでは、POCOはEF依存構造によって動的にプロキシされますが、これは実行時に発生するため、コードが汚染されることはありません。

+0

私はPOCO部分を取得しましたが、リポジトリから来る最終結果オブジェクトがEFオブジェクトと同じ場合、なぜそれを使用しますか? –

+0

EFオブジェクトと同一ではありません。それとも、あなたがその意味を理解していないのですか? –

+0

たとえば、現在のプロパティとしてリレーションがロードされています。シリアル化すると循環参照エラーが発生します。 MVC 3のシリアル化で特定のプロパティを除外するためのオプションがあると信じています... hmmm –

3

POCOジェネレータの場合、生成されたエンティティクラス(Employee、Companyなど)は特別なクラス(したがってPlain Oldと呼ばれます)から派生しません。 エンティティオブジェクトジェネレータの場合、エンティティクラスは特定の機能を提供する特別な 'EntityObject'クラスから派生します。

POCOクラスの背後にある目的は、エンティティのDB固有の懸念を排除することです。したがって、ドメインモデルはDB /永続性操作を認識できません。

+0

たとえば、NHibernateでは、リポジトリからPOCOを取り出し、変更して、Repo.Save()をパラメータなしで呼び出しますディスクに変更されたポコ?これが任意のORMの標準であればOKですが、EFにはかなり依存しているようです。 –

関連する問題