40

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

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

4

2 に答える 2

41

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

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

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

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

于 2011-02-23T14:19:38.810 に答える
15

主な目的は、N層の開発を支援することです。それらは自己追跡であるため、たとえばWCFサービスでシリアル化してから逆シリアル化することができます。そうすれば、どの変更が行われたかがわかり、データベースで保留になります。

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

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

于 2011-02-23T14:17:14.123 に答える