1

私は現在、70-516試験(データへのアクセス)のセルフペーストレーニングキットを読んでおり、EntityFrameworkに関する章にいます。

私はそれがObjectContextについて話し、クリーンアップのためにIDisposableを継承しているところです。これは、私が研究するときに正確な答えを得ることができないように思われるいくつかの質問をもたらしました。私は物事がどのように機能するかを理解しようとしています。


シナリオ:WCFRia とEntityFrameworkを使用してSilverlightアプリケーションを作成し、MVVMLiteパターンを使用しました。EDMXを作成し、FamilyServiceというドメインサービスを作成しました。これは、SilverlightアプリケーションでFamilyContextとして使用します。FamilyMemberテーブルからデータを返すGetFamilyMembersというメソッドを作成します。

[EnableClientAccess()]
public partial class FamilyService : LinqToEntitiesDomainService<FamilyEntities>
{
    public IQueryable<FamilyMember> GetFamilyMembers()
    {
        return this.ObjectContext.FamilyMembers;
    }
}

私のViewModelでは、FamilyContextのインスタンスを作成し、クリーンアップ時にnullにします。


1)FamilyContextオブジェクトをnullにすると、サーバー上のObjectContextに対して何かが行われますか?ドメインサービスで手動で作成したり破棄したりすることは決してないので、これを尋ねます。

2)Entity Frameworkでクエリを実行すると、データがキャッシュされることを理解しています。RIAシナリオでは、データはクライアントアプリケーションのFamilyContextにキャッシュされますか、それともサーバーのObjectContextに引き続き存在しますか?アプリケーションの各ビューモデルが独自のFamilyContextのインスタンスを作成するため、ObjectContextがキャッシュを保持しているかどうかだけが気になります。クリーンアップによってビューモデルが軽量化されても、キャッシュを利用できるかどうか疑問に思います。

前もって感謝します。

4

1 に答える 1

1

もう少し差別化する必要があります。

DomainService (FamilyService)はサーバーロジックの一部であり、サービスでリクエスト/メソッド呼び出し( 、、、、、など)が行われるたびにサービスのインスタンスが作成されます。これは、ASP.NET /WCFRIAサービスランタイムによって実行されます。QueryUpdateInsertDeleteInvoke

DomainServicesのインスタンスの作成方法を制御する場合は、独自のDomainServiceFactoryを実装する必要があります。しかし、これは高度なシナリオです。

DomainServiceしたがって、各リクエストはあなたの独自のインスタンスを取得し、の独自のインスタンスも取得しDomainServiceますObjectContext。呼び出しが終了すると、ObjectContextは破棄されます。このシナリオでのキャッシュは、リクエスト中にObjectContextを複数回クエリした場合にのみ発生します。

DomainContextは、ドメインサービスのステートフルクライアント側表現であり、サービスのすべての機能へのアクセスを提供します。からロードされたエンティティを含むキャッシュ(別名EntityCollections)を提供しますDomainService。キャッシュは、ロードされたエンティティを更新または削除したり、新しいエンティティを挿入したりするためにも使用されます。キャッシュの変更を送信する必要があります。これによりDomainService、エンティティを更新、削除、または挿入するために、対応するメソッドが呼び出されます。

DomainContextのインスタンスは、クラスのコンストラクターを使用して作成され、通常はDomainContextのインスタンスを作成してクリーンアップするのはユーザーの責任です。したがって、DomainContextをnullに設定しても、サーバー側では何も起こりません。

于 2012-10-02T06:24:45.057 に答える