Проблемы с загрузкой NHibernate

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

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

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

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

Любая помощь оценила спасибо.

РЕДАКТИРОВАТЬ - КОД

Код сопоставления

 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 и конфигурацией автоматического сопоставления означает, что мои службы отключаются без ошибок, я полагаю, что это попытка сериализации и бесконечный цикл, без выборки и списка, равного нулю, все работает нормально, конечно

1 ответ

Поэтому я решил, что два варианта решения такой проблемы

Вариант А

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

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

Вариант Б

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

Другие вопросы по тегам