wcf dataservice、pocosの[dataservicekey]を回避するにはどうすればよいですか
-
30-09-2019 - |
質問
WCF DataServiceを使用しており、POCOSを使用します。 DataServiceKeyを指定するには、(明らかに)機能する必要があります。それを行うとき、私はSystem.data.services.clientを参照する必要があります(system.data.services.commonの場合) - これはあまりpocoとは感じません。
オブジェクトを清潔に保ち、どこかでキーを指定する方法はありますか?
解決
リフレクションプロバイダーを使用している場合、クラスが重要なプロパティのコンベンションに従わない場合は、DataServiceKey属性を使用する必要があります。 Reflectionプロバイダーは、DataServiceにクラスの定義とコンテキストクラスを単に提供する場合に得られるものです。したがって、idataservicemetadataproviderを実装しない場合は、反射プロバイダーを使用している可能性が非常に高いです。クラスの属性なしで反射プロバイダーを使用することは可能ですが、WCFデータサービスはヒューリスティックを適用して重要なプロパティを把握します。こんなふうになります:
- 問題のクラスにIDと呼ばれるプロパティがある場合、それは唯一のキープロパティとしてIDを持つエンティティです。
- クラスがたとえば顧客と呼ばれ、customerIDと呼ばれるプロパティがある場合、それは唯一の重要なプロパティとしてcustomerIDプロパティを持つエンティティです(クラスの名前は明らかにサンプルと同じです)。
DataServiceKey属性のない重要なプロパティとして認識される他のプロパティはありません。これは、このブログでも説明されています。 http://blogs.msdn.com/b/alexj/archive/2010/06/11/tip-56-writing-an-odata-service-using-the-reflection-provider.aspx
任意のキープロパティを備えた100%PoCoクラスを使用することは可能ですが、カスタムプロバイダーを実装する必要があります。クラスの形状をプログラムで定義する必要があるため、これはかなり作業です。サンプルカスタムプロバイダーのウォークスルーはこちらをご覧ください: http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx