我有一个 WCF 数据服务层,它公开了 POCO T4 模板生成的 POCO 实体。这些 POCO 实体是在他们自己的项目(即 Company.ProjectName.Entities)中创建的,因为我想尽可能地分享它们。
我在另一个项目(Company.ProjectName.Clients)中有一组接口,它们通过向 Company.ProjectName.Entities.dll 添加程序集引用来引用这些 POCO 类型。这些接口的实现之一是 .NET 客户端,我想使用 WCF 数据服务客户端库来使用该服务。
我使用了添加服务引用来添加服务引用。这会生成服务使用的 DataServiceContext 客户端类和 POCO 实体。但是,由 Add Service Reference 实用程序生成的这些 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 方法,并且必须将结果映射回接口可以理解的类型。(可以使用映射器,但似乎不是一个好的解决方案。)
所以问题是,有没有办法让 Add Service Reference 实用程序生成使用 Company.ProjectName.Entities 命名空间中的 POCO 类型的方法?
我正在考虑的一种解决方案是不使用该实用程序来生成 DataServiceContext 和其他类型,而是创建我自己的。
另一种解决方案是更新IRepository<T>
界面以使用实用程序生成的 POCO 类型。但这听起来有点骇人听闻。
有没有人提出过更好的解决方案,或者有什么建议?