2009-11-05 33 views
1

对象图“[类型]”包含周期,并且如果参考跟踪被禁止不能被序列化。NHibernate和WCF序列化(单向)类型

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

例如:

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

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

这仅仅是做一个有关孩子的单亲家庭,并且通过数据库中的外键被持久化。 NHibernate的部分和持久性工作得很好。通过WCF Web服务公开此关系时发生此问题。我意识到这里有一个循环引用,并且已经阅读了LINQ to SQL允许单向序列化的一些解决方案,但是当不使用dbml文件时无法找到解决方案。


UPDATE

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


其他更新

我碰到一个article,可能是在正确的方向。我现在正在测试这个,如果成功的话会发布(对于文章价值的缘故)。

回答

3

这是为了保护您的域名,而不是让它跨进程边界去的最佳实践。我会推荐一个DTO实现来抽象你的域。还有其他好处,包括可以提供一个意图揭示接口(客户不应该思考如何使用该服务)。

+1

实际上,我已经花了一整天的时间习惯了AutoMapper和一些较轻的DTO通过线路发送,而不是域实体。 – 2009-11-07 06:09:09