POCOT4テンプレートによって生成されたPOCOエンティティを公開しているWCFデータサービスレイヤーがあります。これらのPOCOエンティティは、可能な限り共有したいので、独自のプロジェクト(Company.ProjectName.Entitiesなど)で作成されます。
別のプロジェクト(Company.ProjectName.Clients)に、Company.ProjectName.Entities.dllへのアセンブリ参照を追加することによってこれらのPOCOタイプを参照する一連のインターフェイスがあります。これらのインターフェイスの実装の1つは、WCFデータサービスクライアントライブラリを使用してサービスを利用したい.NETクライアントです。
サービス参照の追加にサービス参照の追加を使用しました。これにより、サービスで使用されるDataServiceContextクライアントクラスとPOCOエンティティが生成されました。ただし、サービス参照の追加ユーティリティによって生成されたこれらのPOCOタイプは、現在、異なる名前空間(Company.ProjectName.Clients.Implementation.WcfDsReference)を持っています。
つまり、インターフェイスで定義されたPOCOタイプは、キャストまたはマップする必要なしに、ユーティリティによって生成されたタイプで使用することはできません。
つまり、私が持っているとしましょう:
1. POCO Entity: Company.ProjectName.Entities.Account
2. Interface: interface IRepository<Company.ProjectName.Entities.Account>{....}
3. Implementation: ServiceClientRepository : IRepository<Company.ProjectName.Entities.Account>
4. WcfDsReference: Company.ProjectName.Clients.Implementation.WcfDsReference
& Company.ProjectName.Clients.Implementation.WcfDsReference.Account
Let's say I want to create a DataServiceQuery query on the Account, I won't be able to do this:
var client = new WcfDsReference(baseUrl);
var accounts = client.CreateQuery<Company.ProjectName.Entities.Account>(...)
OR: client.AddToAccounts(Company.ProjectName.Entities.Account)
, because the CreateQuery<T>() expects T to be of type & Company.ProjectName.Clients.Implementation.WcfDsReference.Account
私が現在しなければならないことは、正しいエンティティをCreateQueryメソッドに渡し、結果をインターフェイスが理解できるタイプにマップする必要があることです。(マッパーで可能ですが、良い解決策ではないようです。)
したがって、問題は、サービス参照の追加ユーティリティを取得して、Company.ProjectName.Entities名前空間にあるPOCOタイプを使用するメソッドを生成する方法はありますか?
私が考えている解決策の1つは、ユーティリティを使用してDataServiceContextやその他のタイプを生成するのではなく、独自のタイプを作成することです。
IRepository<T>
もう1つの解決策は、ユーティリティによって生成されたPOCOタイプを使用するようにインターフェイスを更新することです。しかし、これは少しハッキーに聞こえます。
誰かが思いついたより良い解決策はありますか、または何か提案がありますか?