NHibernate: Объединение преобразователей результата? - PullRequest
1 голос
/ 25 марта 2012

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

criteria.SetResultTransformer(CriteriaSpecification.DistinctRootEntity);

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

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

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

1 Ответ

5 голосов
/ 25 марта 2012

Чтобы загрузить только необходимый столбец в 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();
...