NHibernate Использование SetProjection для извлечения отдельных элементов коллекции - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь использовать проекции для создания DTO из класса Lead.У моего DTO есть, например, номер домашнего телефона, номер мобильного телефона и адрес электронной почты, но у ведущего класса есть набор контактных данных.Поэтому я пытаюсь найти способ извлечь каждую контактную информацию, чтобы я мог установить свойства в dto.Я пытался использовать подзапросы и прогнозы, но безрезультатно.

SQL, который я пытаюсь сгенерировать, выглядит примерно так:

SELECT 
     A.LeadId, 
     B.ContactId,
     B.Value,
     C.ContactId, 
     C.Value, 
     D.ContactId
FROM Lead A
LEFT JOIN ContactDetail B ON A.LeadId=B.LeadId AND B.ContactType='Home Number'
LEFT JOIN ContactDetail C ON A.LeadId=C.LeadId AND C.ContactType='Mobile Number'
LEFT JOIN ContactDetail D ON A.LeadId=D.LeadId AND D.ContactType='Email Address'

Итак, я пытаюсь присоединитьсяк одной и той же таблице 3 раза, основываясь на разных критериях, и я знаю, что в NHibernate я не могу использовать CreateAlias ​​для соединения с одной и той же таблицей более одного раза, и мне хотелось бы знать, возможно ли это с помощью API Criteria или NHIbernateLinq.Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 22 июня 2011

Я бы загрузил «обычный» экземпляр отведения из nHibernate с его коллекцией контактных данных. Тогда я бы использовал AutoMapper, чтобы сопоставить его с классом DTO.

На мой взгляд, это гораздо более чистый подход, поскольку вы не создаете специальные методы доступа к данным только для "простых" отображений DTO. И это проще для рефакторинга, так как все выражается через "c sharp code".

Ссылка на AutoMapper

...