좋아요, 오토메퍼, 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없이 목록, 물론 모든 작품 물론
기존 코드를 게시하십시오 – Paul
알았어. – Rosslee