使用POCO对象或分离的EntityFramework对象通过WCF公开数据库更好吗?



我创建了一个WCF service负责公开我的数据库的数据,因为我不希望数据库被我的应用程序直接访问(出于安全原因),我需要能够与第三方应用程序共享数据。

我的解决方案是这样结构的:WPF application -> WCFService library -> DataAccessLayer library。(箭头定义了程序集依赖关系'depends on')

为了实现WCF service,我考虑简单地从服务返回detached EntityFramework objects,但它迫使主应用程序依赖于DataAccessLayer库。

我可以解决的唯一方法是生成POCO objects并使用它们通过电线发送它们,但现在我必须来回映射值EntityFramework.

此刻,我通过T4 template动态地生成POCO s,我使用AutoMapper来来回映射EntityFramework的值。

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

这是一个好的解决方案吗?还有其他选择吗?有什么缺点需要我注意吗?

根据您的约束条件,我不得不同意这个解决方案。

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

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

所有WCF服务(契约和实现)也由T4模板生成,使用通用存储库。使用T4模板,我能够为每个表生成用于CRUD操作的单独WCF服务,然后手动创建特定于业务的WCF服务。

最后,我还能够使用T4模板来生成与SOAP服务交互的Delphi存储库。

您可以轻松地将POCOs(和代码生成)移动到单独的项目中,更改DataAccessLayer库以引用POCOs库,并仅包含由POCOs的dbset组成的Db上下文和数据访问逻辑,但不包含实体(现在是POCOs)。您的客户端将不需要依赖于DataAccessLayer库。

所以…这是一个很好的解决方案,取决于您的约束。

最新更新