NHibernate和WCF序列化(单向)

类型'[type]’的对象图包含循环,如果禁用参考跟踪,则无法序列化。

我有一个简单的类层次结构设置使用NHibernate作为我的持久层。

例如:

public class Parent { public virtual IList Children{get;set;} } public class Child { public virtual Parent Parent{get;set;} } 

这样做只是为了将Child与单个父级相关联,并通过数据库中的外键持久化。 NHibernate部分和持久性工作得很好。 通过WCF Web服务公开此关系时会出现此问题。 我意识到这里有一个循环引用并且已经阅读了一些LINQ to SQL的解决方案,允许单向序列化,但是在不使用dbml文件时无法找到解决方案。

UPDATE

另一个问题是,通常的做法是抽象一组DTO通过Web服务而不是原始实体公开吗? 这将解决序列化问题,因为DTO类不一定需要循环引用(因为它们不是NHibernate实体)。

其他更新

我发现了一篇可能正确方向的文章。 我目前正在对此进行测试,如果成功则会发布(因为文章值得)。

最佳做法是保护您的域名,而不是让它跨越流程边界。 我建议使用DTO实现来抽象您的域名。 还有其他好处,包括您可以提供意图揭示界面(客户不应该考虑如何使用该服务)。