2009-04-16 13 views
2

私はlinqオブジェクトをWCFでシリアル化しています。 dbmlは単方向シリアル化用に設定されています。WCFでlinqエンティティをシリアライズ

私のオブジェクトはかなりシンプルです:BudgetはBudgetLineItemsのコレクションを持っています。各BudgetLineItemにはItemCateogryがあります。

Budget/BudgetLineItemsは問題なくシリアル化されます。しかし、各BudgetLineItemのItemCateogryはそうではありません。私はデフォルトでは、linqは各BudgetLineItemのItemCategoryに[DataMember]を追加していないことに気付きました。手動で追加し、[IgnoreDataMember]を使用してItemCategoryエンティティで循環参照を削除しました。しかし、運が悪い。

質問:

  1. は、デフォルトでは、WCF多対1の関係をシリアル化、または私は何かが足りないのですができますか?シリアル化されたデータは、それぞれのBudgetLineItemのItemCategoryデータが重複していて、むしろ減りますが、それは問題ありません。

  2. このためにカスタムのDataContractSerializerを実行する必要がありますか?

** EDIT **実際に、仕事をしました([DataMemberを]追加)、私はクライアント(当たり前)上のサービス参照を更新しませんでした。

新しい質問:linqtosqlデザイナーに、デザイナーが生成しているエンティティの[DataMember]と[IgnoreDataMember]フィールドを維持するよう指示する方法はありますか?それ以外の場合は、dbmlを保存するたびに更新する必要があります。

答えて

3

WoFのLINQ 2 SQLオブジェクトを正常にシリアル化しましたか?

L2Sエンティティに子どもを指し示す関係があり、次に親が指し示す関係があったのですが、明らかにそれを構築するための列挙時に関係がありました(これは非常に嫌なことです。 WCFオブジェクトでは、この方法で木を無限に移動することができず、オーバーフロー例外が発生したため、この道を行くと基本的には何を言っているのですか?

マイケルのポストをフォローして、あなたのWCFオブジェクトをPOCO(カスタムモデル表現)に変換することをお勧めします。 WCFリクエストに必要なものを正確に転送するカスタムWCFオブジェクトを作成することを常に望んでいるため、上に示したようにうまくいかなかったことをうれしく思います。余分なデータのスタックは含まれていませんあなたのL2Sエンティティがそれをたくさん持っていると確信しています。実際に私がL2Sデータを直接に送信しようとしたのは、特定の「ルール」を採用したエンジンを作成しなければならなかったためで、これらのルールは約4つのデータベーステーブルとリレーションシップとの相関関係に保存されていたため、 WCFオブジェクト。

最後に私は、カスタムコードジェネクラスを拡張して[DataContext]でWcf.csを組み込み、L2Sクラス - > WCFカスタムクラスのプロパティを複製しました。

これは最後に完全に機能しました。これはcloning procedure I used with instructions on my blogです。

私はこれに満足しており、悪い習慣が関わっているとは感じません。お役に立てれば。

+0

情報ありがとうございます。シリアライゼーションを成功させるために、再帰的な(通常は親への参照)プロップに[DataMemberIgnore]を追加する必要がありました。 dbmlの変更を呼びかけましたが、もちろん変更ごとに上書きされます。それは動作しますが、非常にシームレスではありません。ご存じのように、シリアライズされたオブジェクトは_巨大です。 ありがたいことに、これはコンセプトの証明にすぎません(還元型ロジックを取り除くために、私たちのサービスにWCFレイヤーを消費するSQLRS2008) – ericvg

+0

OKいいえprobです。私のクローン手順をよく調べて、うまくいけばそのルートがあなたを助けてくれます。 – GONeale

+0

素晴らしい!あなたのブログは消えています:( – Moulde

1

WCFでlinqエンティティを送信しないでください。代わりに、独自のビジネスデータモデルを作成し、それらを有線経由で送信します。データベースを変更した場合、サービスに接続するすべてのプログラムを変更する必要はありません。

+0

が同意しましたが、この特定の項目の目的で、私たちはそれを取引しています。 – ericvg

関連する問題