Проблемы с загрузкой NHibernate - PullRequest
0 голосов
/ 06 марта 2011

Хорошо, у меня есть проблема, связанная с AutoMapper, моим запросом NHibernate или дизайном домена / DTO.

У меня проблема в том, что когда я делаю выборку, например, 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 получить список, но оставить прокси в родительском свойстве. Наихудшим решением было бы изменение объекта домена с объектами для определенных сценариев или логической логики.

Спасибо за помощь, спасибо.

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

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

 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 Ответ

0 голосов
/ 07 марта 2011

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

Параметр A

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

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

Вариант B

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...