2016-09-07 42 views
0

我负责的揭露我的数据库中的数据,因为我不希望我的应用程序(出于安全原因)直接访问数据库,我需要能够与大家分享的第三方应用程序的数据也创造了一个WCF service使用POCO对象或分离的EntityFramework对象通过WCF公开数据库会更好吗?

我的解决方案采用这种结构:WPF application - >WCFService library - >DataAccessLayer library。 (箭头定义程序集依赖关系'取决于')

为了实现WCF service我认为只是从服务BUT返回detached EntityFramework objects,它强制主应用程序依赖于DataAccessLayer库。

我能得到周围的唯一途径是产生POCO objects并用它们来通过网络发送它们,但现在我要值映射来回EntityFramework.

目前我生成POCO小号动态通过T4 template和我使用AutoMapper来回映射值EntityFramework

WCF服务将只需要实现存储库模式来公开数据。

这是一个很好的解决方案吗?还有其他的选择吗? 有什么缺点我应该知道?

回答

0

根据你的限制,我必须同意这个解决方案。

我创建了一个几乎相同的解决方案,但我们的动机略有不同。我们的客户端是Delphi Win32,并且当时对JSON没有很好的支持,所以我们不得不使用SOAP。

客户端也不支持可空基元,所以POCO删除所有不支持的类型,并执行其他更改以确保互操作性,然后我们使用Automapper自定义映射来处理双向转换。

所有WCF服务(合同和实现),其中还T4模板生成,使用通用库。使用T4模板,我可以为每个表生成单独的WCF服务以进行CRUD操作,然后手动创建业务特定的WCF服务。

最后,我还能够使用T4模板来生成德尔福库,与SOAP服务交互。

或者

你可以很方便地移动波苏斯(和代码生成),以一个单独的项目,改变你的DataAccessLayer库引用波苏斯库,只包含由的DbSets的Db的情况下你POCO和数据访问逻辑,但没有实体(现在是POCO)。您的客户不需要依赖DataAccessLayer库。

所以...一个很好的解决方案,取决于你的约束。