繁体   English   中英

将WCF服务与Entity Framework 4和…DTO一起使用?

[英]Using a WCF Service with Entity Framework 4 and…DTO?

如上所述,我正在实现一种多层体系结构,以与WCF和Entity Framework 4(带有poco)一起使用。 由于我已经对POCO有了持久性的无知,因此我需要实现DTO还是可以以其纯方式使用WCF?

主要报价是-我确实需要DTO在网络上传递轻量级对象,或者我可以使用POCO实体。

你们推荐什么?

除非您定义“纯方式”,否则很难回答。 我们是在说纯SOA还是WCF?

WCF代理在某种程度上已经是DTO,因为它们不会在整个服务合同中带来任何业务逻辑。 在WCF生成的代理类之上创建另一层DTO似乎是多余的。

您要回答的最大问题是“此解决方案如何?”。 如果要符合SOA,则不能跨服务边界共享POCO实体。 SOA都是关于完全不同的合同的。

如果您使用所有基于SOA的服务,那么您将失去很多功能,因为您的Web层大部分时间将使用的类将是愚蠢的代理。 您将不得不重复很多逻辑,并且丢失了MVC 2提供的许多“元数据,约定而不是配置”功能。

如果您将SOA流行语扔进粉碎机中(应该这样做)( http://soafacts.com/ ),那么您将可以更轻松地在各个层之间共享业务逻辑和元数据信息。 如果您自己是Web服务的唯一使用者,那么此方法可能是您的最佳选择。

在这里,您可以使用DTO而不是POCO实体通过电线发送。 唯一的缺点是,重复了逻辑,并且执行了许多不起作用的样板代码。 确实取决于项目的大小。 如果规模很小,那就不用考虑DTO了,但是如果您有20个开发人员使用200,000个LoC,那么DTO可能值得创建。

正如jfar所说,这取决于您是否将成为仅使用该服务的人,还是表示层将仅由您自己决定。

如果您要进行后面的操作,而只是要使用服务,则可以跨wcf服务边界序列化POCO。 这是我最近所做的,并撰写了有关使它正常工作的博客文章 这将允许您在应用程序层和表示层中使用相同的实体。

希望能帮助到你。

在将WCF与EF一起使用时,推荐DTO的最强烈理由是,EF数据库优先类将实现依赖项拖到您的代理类中。 如果将代码优先与POCO类一起使用,则应该没有实现依赖项。

尝试仅返回您的POCO类,然后仔细查看生成的代理类。 确保这些类中没有任何东西是EF基础结构的一部分。 如果代理类是干净的,那么您应该已经准备就绪。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM