2011-03-06 7 views
0

좋아요, 오토메퍼, NHibernate 쿼리 또는 도메인/DTO 디자인에 이르기까지 문제가 있습니다.NHibernate 페칭/오토 매퍼 문제

내가 가진 문제는 가져 오기를 수행 할 때 ObjectA에 ObjectB 목록이 포함되어 있고 ObjectB에 부모 ObjectA 속성이 포함되어 있다는 것입니다. ObjectA의 ObjectB 속성에서 열심히 가져 오기를 수행하는 쿼리가있을 때 영원히 A.B.A.b.A.B.A.B 등으로 계속 갈 수 있습니다.

도메인 개체를 동일한 거래가 들어있는 DTOA에 매핑하려고하면 DTOA에 DTOB 목록이 있고 DTOB에는 부모 DTOA 속성이 있습니다. DTOA에 DomainA를 매핑하기 위해 AutoMapper를 사용하고 있고 DTOA.DTOB.DTOA.DTOB 등이 무한히 직렬화되어 있기 때문에 반환 할 때 내 서비스 시간이 초과되었습니다.

어쨌든 내가 뭘 확신 할 수있는 가장 좋은 해결책은 나이 오래된 고전적인 문제이지만 내 오랜 친구 인 Google에 올바른 것들을 찾아내는 데 어려움을 겪고있다. AutoMapper가 자식의 부모 인스턴스를 무시하도록 할 수 있습니까? Nhibernate가 목록을 가져 오지 만 부모 속성에 프록시를 유지할 수 있다면 더 좋다고 생각할 수도 있습니다. 최악의 해결책은 특정 시나리오 나 특정 논리에 대한 개체를 사용하여 도메인 개체를 변경하는 것입니다.

아무 덕분에 감사드립니다.

편집 - CODE

매핑 코드

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

도메인 객체 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; } 
} 

도메인 객체 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 도메인 구조 및 자동 매퍼 구성이 오류없이 밖으로 내 서비스 시간을 의미 실행, I는 다음과 같이 가정의 serialize하려고 노력하고 끝없이 루핑, 가져 오기 및 null없이 목록, 물론 모든 작품 물론

+0

기존 코드를 게시하십시오 – Paul

+0

알았어. – Rosslee

답변

0

그래서 두 가지 옵션은 이러한 issu 해결하기 위해 결정했습니다 전자

DOMAINA

의 인스턴스가이 매핑이 한 방향 및 양방향없는 것 의미입니다 DOMAINB의 매핑을위한

변경 AutoMapper이 DOMAINB의 속성을 무시하는 옵션

옵션 B

도메인 B에서 DomainA 속성을 제거하십시오! 내가 원하는 시스템을 고려한 후에 부모에게 연결되는 이러한 속성을 제거하기로 결정했습니다