如何在WCF上传输NHibernate PersistentGenericSet

时间:2010-03-31 07:16:27

标签: wcf nhibernate

我正在尝试通过WCF发送NHibernate检索的对象,但是只要有一个ICollection的属性,我就会得到一个异常。

当NHibernate从数据库获取数据时,此属性将使用PersistentGenericSet实例进行初始化。

有没有办法可以通过WCF发送PersistentGenericSet?

-OR -

有没有办法让NHibernate用另一种类型初始化这些属性?

1 个答案:

答案 0 :(得分:1)

PersistentGenericSet是NHibernate的一部分(用于跟踪集合中的更改)。它基于ISet接口和Iesi.Collections的类,它们用于填补.Net框架中的空白,因为没有Set类型。我想WCF在序列化这种类型时遇到了问题。

快速解决方法是将NHibernate映射更改为使用Bag而不是Set。然后,您可以在课程中使用普通IList<T>代替Set<T>

更好的解决方案是创建remote facade,将DTOs发送到您的WCF端点。这将允许您将内部类型的接口与作为远程服务公开的接口分开。 Jimmy Bogards Automapper是一个很好的工具,可以帮助完成绘图过程。

修改

重新阅读问题之后,我浏览了一下这个article,它描述了通过WCF发送NHibernate集合的解决方法。大卫布莱恩写了一篇很好的跟进article