2012-03-25 4 views
1

Я работаю с API критериев, запрашивая файл сопоставления, который я не могу изменить. Существует корень предприятие с большим количеством дочерних организаций присоединились к нему и некоторые запросы требовали нам добавитьNHibernate: Объединение трансформаторов результатов?

criteria.SetResultTransformer(CriteriaSpecification.DistinctRootEntity); 

для того, чтобы избежать получения дубликатов объектов при наличии нескольких результатов SQL-линии из-за стыки. Проблема заключается в том, что теперь я хочу, чтобы применить трансформатор псевдоним к-боб, например, так:

criteria.SetResultTransformer(Transformers.AliasToBean(typeof(MyDto))); 

Используя либо одну из этих работ велики. Однако мне нужно их комбинировать: я хочу загрузить только нужные столбцы в объект DTO, а также получить только отдельные корневые объекты. Как я могу это сделать?

ответ

5

Чтобы загрузить только нужную колонку в DTO вы можете использовать проекцию с DistinctEntityRootTransformer следующим

ICriteria criteria = session.CreateCriteria(typeof(YourEntity)); 
criteria.SetProjection(
Projections.Distinct(Projections.ProjectionList() 
    .Add(Projections.Alias(Projections.Property("Property"), "Property"))); 

criteria.SetResultTransformer(
new NHibernate.Transform.AliasToBeanResultTransformer(typeof(MyDto))); 

IList list = criteria.List(); 
+0

Да! Спасибо тебе, рок! – joniba

+4

Я не вижу 'DistinctEntityRootTransformer' ... –

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