2011-03-06 3 views
0

Итак, у меня есть проблема на данный момент, которая либо до AutoMapper, либо моего NHibernate-запроса, либо проекта Domain/DTO.Проблемы с извлечением/automapper NHibernate

Проблема заключается в том, что когда я делаю выборку, например ObjectA содержит список объектов ObjectB, а ObjectB имеет свойство родительского объекта ObjectA. Когда у меня есть запрос, который делает надежную выборку в свойстве ObjectB моего объекта ObjectA, тогда я могу бесконечно вечно использовать A.B.A.b.A.B.A.B и так далее.

Это означает, что при попытке сопоставить объект домена с DTOA, который содержит ту же самую сделку, DTOA имеет список DTOB, а DTOB имеет свойство его родительского DTOA. Мои службы тайм-аут при возврате этого, потому что я считаю, что я использую AutoMapper для сопоставления DomainA с DTOA, а затем потому, что DTOA.DTOB.DTOA.DTOB и т. Д. Заполняет бесконечную сериализацию.

В любом случае лучшее, что я уверен, это старая классическая проблема, но я изо всех сил пытаюсь найти правильные вещи для ввода в мой старый друг google. Могу ли я заставить AutoMapper игнорировать родительский экземпляр в дочернем элементе, желательно, даже если я могу заставить Nhibernate получить список, но сохранить прокси-сервер в родительском свойстве. Наихудшим решением будет изменение объекта домена с объектами для конкретных сценариев или специальной логики.

Любая благодарная благодарность.

EDIT - КОД

Mapping код

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 AutoMapper.Map<DomainA, DTOA>(returnedDomainA); 

Выполнение этого запроса с выборки и что доменная структура DTO и автоматическая настройка картографа означает мои услуги раз из без ошибок, я полагаю, как его пытаясь сериализоваться и бесконечно зацикливаться, без извлечения и списка, равного нулю, все работает нормально, конечно

+0

, пожалуйста, напишите свой существующий код – Paul

+0

Хорошо, просто голый со мной – Rosslee

ответ

0

Итак, я решил, что два варианта решения такой эмиссии е

Вариант А

Изменение AutoMapper для отображения DomainB игнорировать свойство на DomainB, что является экземпляром DomainA

Это будет означать, что отображение будет одно направление, а не двунаправленного

Вариант B

Удалить свойство DomainA из DomainB! После рассмотрения того, что я хотел, чтобы система сделала, я решил удалить эти свойства, связанные с родителями.

 Смежные вопросы

  • Нет связанных вопросов^_^