2011-03-06 112 views
0

好吧,所以我現在遇到了一個問題,可能是AutoMapper,我的NHibernate查詢或Domain/DTO設計。NHibernate抓取/自動映射器問題

我遇到的問題是,當我做一個抓取,例如ObjectA包含ObjectB的列表,並且ObjectB具有其父ObjectA的屬性。當我有一個查詢在我的ObjectA的ObjectB屬性上進行了一次急切的獲取時,那麼我可以永遠無限地繼續A.B.A.b.A.B.A.B等等。

這意味着當我嘗試將域對象映射到包含相同交易的DTOA時,DTOA具有DTOB列表,並且DTOB具有其父DTOA的屬性。我的服務在返回時超時,因爲我相信我使用AutoMapper將DomainA映射到DTOA,然後是因爲DTOA.DTOB.DTOA.DTOB等被無限序列化。

無論如何,最好的解決方案,我敢肯定的是一個古老的經典問題,但我正在努力找到正確的東西輸入到我的老朋友谷歌。我可以讓AutoMapper忽略子進程中的父實例,最好甚至我認爲如果我可以讓Nhibernate獲取列表,但在父屬性上保留一個代理。最糟糕的解決方案是使用特定場景或特定邏輯的對象更改域對象。

任何幫助表示讚賞謝謝。

編輯 - CODE

映射代碼

Mapper.CreateMap<DTOA, DomainA>(); 
     Mapper.CreateMap<DomainA, DTOA>() 
      .ForMember(dst => dst.AProperty, 
         opts => 
         opts.ResolveUsing<LazyLoadResolver>().FromMember(src => src.AProperty)); 

Domain對象DomainA中

/// <summary> 
    /// Data Transfer Object, object representing a user 
    /// </summary> 
    public class DomainA 
    { 
     /// <summary> 
     /// Gets or sets the clans. 
     /// </summary> 
     /// <value>The clans.</value> 
     public virtual IList<DomainB> AProperty{ get; set; } 
} 

Domain對象DomainB中

/// <summary> 
/// DTO for clan members 
/// </summary> 
public class DomainB 
{ 
    /// <summary> 
    /// Gets or sets the ID. 
    /// </summary> 
    /// <value>The ID.</value> 
    public virtual int ID { get; set; } 

    /// <summary> 
    /// Gets or sets the user. 
    /// </summary> 
    /// <value>The user.</value> 
    public virtual DomainA BProperty{ get; set; } 

}

NHibernate的查詢

return session.QueryOver<DomainA>() 
       .Where(a => a.ID == id) 
       .Fetch(a=> a.AProperty).Eager 
       .List<DomainA>().FirstOrDefault(); 

WCF服務return語句

return AutoMapper.Map<DomainA, DTOA>(returnedDomainA); 

運行與取該查詢和DTO域結構和自動映射配置意味着我的服務超時沒有任何錯誤,我認爲它的試圖序列化,並無休止地循環,沒有提取和列表爲空,所有工作正常當然

+0

請發佈您現有的代碼 – Paul 2011-03-06 01:10:51

+0

好吧,只要裸露在我身邊 – Rosslee 2011-03-06 01:19:39

回答

0

所以我決定,兩個選項來解決這樣的問題È

選項A

更改AutoMapper爲DomainB中的映射到忽略DomainB中屬性是DomainA中

的實例這將意味着所述映射將是一個方向,而不是雙向

選項B

從DomainB刪除DomainA屬性!考慮到我想讓系統做什麼,我決定刪除這些連接父母的屬性