Как создать запрос, который будет возвращать экземпляры типа, который не сопоставлен?
Я думаю, что у Михала есть смысл, и, возможно, вам стоит взглянуть на прогнозы. (По крайней мере, я думаю, это то, что вы ищете).
Вы создаете запрос для некоторого сопоставленного типа, а затем можете «проецировать» этот запрос на «DTO».
Для этого вам нужно «импортировать» свой класс Person, чтобы он был известен NHibernate, и вам нужно будет использовать ResultTransformer.
Примерно так:
ICriteria crit = session.CreateCriteria (typeof(Person));
// set some filter criteria
crit.SetProjection (Projections.ProjectionList()
.Add (Property("Name"), "Name")
.Add (Property( ... )
);
crit.SetResultTransformer(Transformers.AliasToBean(typeof(PersonView));
return crit.List<PersonView>();
Но это все равно означает, что вам придется импортировать класс, чтобы NHibernate знал об этом.