0

我们有一个使用 CSLA Business Objects 和 NHibernate ORM 的多层应用程序。在我们的业务对象中,我们将集合数据成员保存为ICollection<T>,而在我们的对象映射文件中,我们将它们定义为<set>s。

由于 NHibernate 使用它自己的具体类型来获取这些集合,当这些集合到达客户端时我们会遇到问题,因为我们没有在客户端应用程序中引用 NHibernate 程序集(而且我们不想更改它)。

有没有办法解决这个问题或以某种方式强制 NHibernate 使用 .net 集合类型或我们自己的集合类型,而不实现任何 NHibernate 集合类型接口?

提前致谢,

亚龙。

4

2 回答 2

0

NHibernate 需要它自己的集合实现来管理持久性状态。所以你不能改变 NHibernates 的行为。

我们正在使用 WCF,它在序列化时将集合转换为数组或列表。如果您的基础设施不这样做,您需要在发送到客户端之前转换对象。

无论如何,最好使用 DTO(数据传输对象)模型。您需要将所有数据从业务模型复制到 DTO 模型。

如果你不喜欢 DTO 模型,我认为你需要交换你的收藏。编写一个将 NH 的集合与 .NET 框架集合交换的方法,例如。使用反射。

或者 - 您使用客户端上对 NHibernate 的引用。

于 2009-05-14T13:14:50.003 回答
-1

您可以使用ICollection<T>HashSet<T>不引用 Iesi.Collections

于 2009-05-14T11:08:20.993 回答