0

WCFサービスを公開するアプリケーションを開発しています。私はDALでEntity Framework 4.1を使用しています。問題は、いくつかのエンティティを読み込むときです(Orderを持つCustomerにOrderDetailがあるとします)。それをロードした後、Customer、Order、OrderDetailオブジェクトをいくつか変更します(いくつかの新しいオーダーが追加され、既存のオーダーが削除/更新されます)。オブジェクトグラフをWCFサービスに送信して、次のように更新します。今はchangetrackingがないのでWCF、Entity Framework 4.1およびエンティティの状態

Customer oCustomer; 
using(var context = new MyContext) //MyContext is dbContext 
{ 
    oCustomer = context.Include("Order.OrderDetail").Find(1); 
} 

oCustomer.Name ="blah blah"; 
Order oOrder1 = oCustomer.Order.Where(obj=>obj.Id == 2); 
oOrder1.Description = "blah blah"; 
oOrder1.OrderDetail.Quantity = 10; 

Order oOrder2 = new Order { ... } //properties of Order are set. 
oCustomer.Order.Add(oOrder2); 

oCustomer.Order.Remove(context.Order.Find(1)); 

ServiceClient client = new ServiceClient(); 
client.SaveCustomer(oCustomer); 

は、今私は、私が注文を除去して、変更されたか知りませんサーバー側でお客様の更新ObjectGraphを受信したとき。どの注文を削除し、どの注文を変更するのかを決定するにはどうすればよいですか? Entity Framework 4.1のオブジェクトグラフの変更を追跡する方法はありますか?

注:以前はこの問題を解決したセルフトラッキングエンティティを使用しましたが、WCFサービスはJavaクライアントアプリケーションでも使用されるため、STEを削除する必要がありました。だから、STEは私の選択肢ではありません。

答えて

2

分かっている限り、セルフトラッキングエンティティ(あなたが言うように使用することはできません)とは別に、切り離されたオブジェクトグラフの変更を追跡する方法はありません。

デタッチされたグラフを更新するには、元のグラフをデータベースから再読み込みし、元のものを変更したグラフと比較します(手書きの場合は大文字と小文字を区別します)。変更をオリジナルに書き込んで、コンテキストを保存します。

(1つの親のために、インスタンス顧客や注文のコレクションの子コレクション、)この手順の例では、この質問への回答である:The relationship could not be changed because one or more of the foreign-key properties is non-nullable

あなたが対処しなければならない場合には、残念ながら非常に複雑になっていますエンティティのより深い階層。私が見る限り、EFは変更されたグラフをオリジナルに自動マージするものではなく、変更されたスカラープロパティと複雑なプロパティのみを持つ非常に単純なケースでのみ使用できます。ナビゲーションプロパティが含まれるとすぐにEFからのサポートはなくなり、更新ロジックを自分で作成する必要があります。

3

答えを読んでいないように見えるので、あなたの質問に答えるのは意味があるのだろうか。

あなたはquestion about STEsと尋ねました。そのユーザビリティについての回答があります。ところで - それは明示的に彼らはリチャードはスイーツ​​について、カスタム・チェンジ・トラッキングについては非常に良いのリンクを掲載、相互運用可能なシナリオ

  • のためではないことを説明したところ
    • は、私がリンクを追加しました。それはまさに今あなたが探しているものです

    STEを使用していて、その後に質問how to use STEs in Java clientをしたので、これらの回答を読んでいない可能性があります。すでにanother your questionで、この質問に対する答えを得るあなたはSTEとEFv4.1

    に関するご自身の質問今日の重複をした、さらに私を驚か何

    あなたはどんな答えを期待していますか?答えを読まなければ、あなたの質問に答える価値はありますか?

    回答:

    DbContextのためとEFはあなたを助けていないので、あなたはhandle change tracking completely yourselves必要スイーツを使用していない、一度STEテンプレートがありません。最も簡単なアプローチは、以前の質問に記述されています。オブジェクトグラフをサービスに再度ロードし、受信したグラフを添付されたエンティティにマージして、コンテキストが変更を追跡できるようにします。より複雑なソリューションは、STEについての以前の質問の1つである@Richardリンクに記述されています。転送された各エンティティにいくつかの状態プロパティを追加する必要があります。クライアントは、正しく設定して返信する必要があります。あなたがそれらを添付したら、各エンティティの状態 - これは少し複雑な場合がありますいくつかの関係。

  • +0

    ガイダンスをありがとう。しかし、私はすべての答えを読んでいます。私は、私の質問のいくつかがある意味で重複していることに同意します。私はそれをより良いとエレガントなソリューションを追求するためにしなければならなかった。 – Baig

    関連する問題