NHibernate&版本3.0中的WCF

时间:2010-03-30 21:58:01

标签: wcf nhibernate-3

我刚刚开始了一个新项目,需要一个WCF服务来处理分布式环境。我仍在努力寻找实现目标的最佳方式。

我想使用NHibernate,但我已经看到了几种不同的方法来解决序列化问题。这是在3.0中处理的吗?我注意到卡车里面有wcf_context:D

如果没有处理,有人能指出我正确的方向吗?

谢谢大家

2 个答案:

答案 0 :(得分:3)

通常,如果您要从服务返回数据,则需要返回特定于服务目的的类,包含与该服务调用相关的内容,DTO(数据传输对象)或DataContract在WCF世界。

对于实体和DTO之间的映射特别有用的一个工具是AutoMapper。无论您使用AutoMapper还是仅使用“左右”编码,这都可以防止延迟加载/延迟执行问题,因为执行映射将导致执行。

为什么从服务中返回实体可能不是一个好主意有很多原因,这里有一些(大多数情况都有不同的意见)

  • 根据您的持久性(在您的情况下为nhib),您可能有行为(延迟执行)或附加到您的实体的状态,这些状态将无法在其他应用或服务器中正确执行
  • 在服务层中返回实体结果通常会导致类似CRUD的调用,导致服务层非常繁琐,并且非常缺乏SOA
  • 不同的调用可能需要比实体更多或更少的数据,DTO使您能够准确地包装您需要的内容,而不是您不需要的内容。
  • 如果您正在尝试构建可重复使用的服务层,则不应假设您的客户可以访问您的实体或域逻辑,而不是服务中的内容。它们可以用另一种应用程序,另一种语言等编写。如果你的实体是你用来移动数据的东西,你就会倾向于忘记这一点。

答案 1 :(得分:0)

您无法使用WCF传递延迟加载的对象。

有一些解决方法,但有一个错误将在下一个WCF版本中修复(即将推出,2010年4月)

除此之外,只要您使用rigth DataContract定义对象,它们就会愉快地在一起。

列表序列化中也存在一个问题 - 您需要使用带有特定标志的svcutil生成代理,否则会发生错误(列表变为数组而您无法添加更多项)(除非您使用某种类型) WCF和NHibernate都同意的列表 - 看一下(Nhiberate和WCF列表) -