2011-01-07 2 views
7

私はWCF DataServiceを使用していて、POCOを使用します。 DataServiceKeyを動作させるには(明らかに)DataServiceKeyを指定する必要があります。 これを行うと、System.Data.Services.Client(System.Data.Services.Common用)を参照する必要があります。これはPOCOをあまり感じません。WCF DataService、POCOの[DataServiceKey]を避けるにはどうすればいいですか?

私のオブジェクトをきれいに保ち、キーをどこか別の場所に指定する方法はありますか?

+0

いいえ、私は他の方法は分かりません。そのため、あなたはPOCOクラスのその単一の属性を受け入れて、これらの優れた機能を利用する必要があります。または、WCF Data Servicesを使用しないでください。 –

+0

私はそれほど純粋主義者ではないので、代わりに私はそれを使用します、ちょうど –

答えて

10

リフレクションプロバイダを使用しており、クラスがキープロパティの規約に従わない場合は、DataServiceKey属性を使用する必要があります。 RefServiceプロバイダは、クラス定義とコンテキストクラスをDataServiceに提供するだけで入手できます。したがって、IDataServiceMetadataProviderを実装していない場合は、リフレクションプロバイダを使用する可能性が非常に高いです。 クラスの属性を持たないリフレクションプロバイダを使用することはできますが、WCF Data Servicesはヒューリスティックを適用してキープロパティを把握します。問題のクラスは、それが唯一の重要な特性として、IDを持つエンティティ IDと呼ばれる 財産ですしている場合

  • :それはこのようになります。
  • クラスは、例えば お客様のために呼ばれると、それは 得意と呼ばれる性質を持っている場合、それは(クラスの名前は単なるサンプルとして明らかに である)のみキー プロパティとして 得意先のプロパティを持つエンティティです。

他のプロパティは、DataServiceKey属性を持たないキープロパティとして認識されません。 http://blogs.msdn.com/b/alexj/archive/2010/06/11/tip-56-writing-an-odata-service-using-the-reflection-provider.aspx

任意のキープロパティで100%POCOクラスを使用できますが、カスタムプロバイダを実装する必要があります。これはプログラムのクラスの形を定義しなければならないので、かなり多くの作業が必要です。サンプルカスタムプロバイダのウォークスルーは、次のURLにあります。http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx

+0

を確認したい、それは私が探していたものでした。ありがとうございました! –

関連する問題