12

昨年、Entity Framework (もちろん .NET3.5) を使用し、Julie Lerhman の本をガイドとして使用して、プロジェクトのデータ アクセス サービスを開発しました。状態追跡 POCO オブジェクトを開発しました。WCF を使用し、Silverlight 3 クライアントもあります。私たちは .NET 4.0 に移行しており、コード生成の使用に切り替えて、POCO クラスと翻訳クラスを作成する開発者の無駄な時間をなくしたいと考えています。

私が行った調査では、POCO を追跡する状態には 3 つの方法があるようです。

1) 追跡されたプロキシの変更: これは WCF シリアル化では機能しないように見えるため、役に立たないようです。

2) スナップショット ベース: POCO エンティティ グラフが取得されたときにスナップショットが取得され、クライアントから返されたグラフがそのスナップショットと比較され、差異が比較されます...私には良いようです。

3) 自己追跡エンティティ: コード ジェネレーターは、POCO オブジェクト内で自己追跡を行うためのロジックを生成します。これは、すべてが私たちのために生成されていることを除けば、現在私たちが行っていることに近いようです。

これらすべての方法の長所と短所を理解しようとしています。1 と 2 は「接続」されており、インスタンス化されたままにするために POCO が最初に照会された ObjectContext が必要であると推測していますが、これを確認することはできませんでした。また、オプション 3 が同じかそれ以上のことを行うように見えることを考えると、誰もがオプション 1 を実際に気にする理由もわかりません...

スナップショットは私にとって最も単純なように思えますが、これが ObjectContext を長時間開いたままにする必要があるかどうかはわかりません...

私はジュニア プログラマーに過ぎないので、特に Silverlight 3 に関して (オプション 2 と 3 は Silverlight 3 で動作すると思いますが、オプション 2 には問題がある可能性があります)、ここでのアドバイスは大歓迎です。

4

2 に答える 2

14

オプション 3. Self-Tracking Entities を使用してください。これが設計された目的です。

「自己追跡エンティティは、シリアル化シナリオ用に最適化されています」

この投稿は良いデモンストレーションを提供します。

于 2010-02-26T22:16:49.530 に答える
2

他の 2 つのオプションは、オブジェクト コンテキストが存在するときに変更が行われた場合にのみ適用されます。あなたの唯一の選択肢はSTEです。STE を使用すると、エンティティは独自の変更を追跡できます。変更されたオブジェクト グラフがサーバーに送信されると、以下に示すように、これらの変更を再生できます。db.Dustomers.ApplyChanges(顧客); db.SaveChnages();

STE を使用すると、エンティティをクラス ライブラリ プロジェクトに作成し、それらを WCF クライアント、Silverlight クライアント、asp.net、および wpf 間で共有できます。したがって、これにより、さまざまなクライアントでエンティティを再利用できます。

于 2010-07-10T06:01:42.743 に答える