我创建了一个WCF service
负责公开我的数据库数据,因为我不希望我的应用程序直接访问数据库(出于安全考虑),我需要能够与第三方应用程序共享数据。
我的解决方案采用以下方式构建:WPF application
- > WCFService library
- > DataAccessLayer library
。 (箭头定义装配依赖性'取决于')
实现WCF service
我认为只是从服务返回detached EntityFramework objects
但它强制主应用程序依赖于DataAccessLayer库。
我可以解决的唯一方法是生成POCO objects
并使用它们通过网络发送它们,但现在我必须来回映射值EntityFramework.
目前,我通过POCO
动态生成T4 template
,并且我使用AutoMapper
来回映射值EntityFramework
。
Wcf服务只需要实现存储库模式来公开数据。
这是一个很好的解决方案吗?还有其他选择吗? 我应该注意哪些缺点?
答案 0 :(得分:0)
根据您的限制,我不得不同意这个解决方案。
我创建了一个几乎完全相同的解决方案,尽管我们的动机略有不同。我们的客户端是Delphi Win32,当时没有对JSON的良好支持,所以我们不得不使用SOAP。
客户端也不支持可以为空的原语,因此POCO删除了所有不支持的类型,并执行了其他更改以确保互操作性,然后我们使用Automapper自定义映射来处理双向转换。
所有WCF服务(合同和实现)也由T4模板生成,使用通用存储库。使用T4模板,我能够为每个表生成单独的WCF服务以进行CRUD操作,然后手动创建特定于业务的WCF服务。
最后,我还能够使用T4模板生成与SOAP服务交互的Delphi存储库。
或强>
您可以轻松地将POCO(和代码生成)移动到单独的项目,更改DataAccessLayer库以引用POCO库,并且仅包含由POCO的DbSets和数据访问逻辑组成的Db上下文,但不包含实体(现在是POCO)。您的客户端不需要依赖DataAccessLayer库。
所以...一个很好的解决方案,取决于你的约束。