web-dev-qa-db-ja.com

エンティティを自己追跡する目的は何ですか?

私は.netの自己追跡エンティティと、*。edmxファイルからそれらを生成する方法について読んでいます。私が理解するのに苦労しているのは、これらのエンティティを生成すると、基本的なEFエンティティに対して何が得られるかです。また、自己追跡エンティティとSilverlightについて言及している人もいますが、RIAサービスによって生成されるクライアント側や共有クラスではなく、なぜこれらを使用するのでしょうか。

自己追跡エンティティのポイントは何ですか?なぜそれらを使用するのですか?

40
Calanus

セルフトラッキングエンティティ(STE)は変更セットの実装です(以前の.NETの変更セットの実装はDataSetです)。 STEと他のエンティティタイプ(POCO、EntityObject)の違いは、共通のエンティティタイプは、リビングObjectContextに接続されている場合にのみ変更を追跡できることです。共通エンティティが切り離されると、変更追跡機能が失われます。これがまさにSTEが解決することです。 STEは、ObjectContextからデタッチしても変更を追跡できます。

STEの一般的な使用方法は、Webサービスを介した.NETから.NETへの通信などの切断されたシナリオです。 Webサービスへの最初のリクエストにより、STEが作成されて返されます(エンティティはシリアル化されると切り離され、ObjectContextは単一の呼び出しにのみ対応します)。クライアントはSTEに変更を加え、それを別のWebサービス呼び出しで返します。 STEの内部変更追跡を利用できるため、サービスは変更を処理できます。

変更追跡なしでこのシナリオを処理することは可能ですが、特に単一エンティティではなくオブジェクトグラフ全体を操作する場合は、はるかに複雑になります。クライアントから受信した変更をデータベースで現在の状態に 手動でマージ 変更する必要があります。

それらの機能はサーバーとクライアント間でのSTEコードの共有に基づいているため、 STEは相互運用可能ではありません ソリューションであることに注意してください。

41
Ladislav Mrnka

主な目的は、N層の開発を支援することです。これらは自己追跡型であるため、たとえばWCFサービスを介してシリアル化してから、逆シリアル化して戻すことができます。また、変更内容が認識され、データベースに対して保留されています。

自己追跡エンティティは、変更がどの階層で行われるかに関係なく、独自の変更追跡を行う方法を知っています。アーキテクチャとして、自己追跡エンティティはDTOとデータセットの間にあり、それぞれの利点のいくつかが含まれています。

http://blogs.msdn.com/b/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx

15
Adam Rackis