зависит от того, где вы должны передать свой результат. Это в том же процессе, скажем, на сервере, вам не нужен какой-либо специальный класс, потому что вы можете использовать ленивую загрузку. Вы настраиваете NHibernate только для загрузки ссылочных объектов при доступе к ним.
Если вы отправляете результат по проводу, он отличается, потому что вам необходимо сериализовать данные и потребовать, чтобы все свойства были заполнены. На самом деле это не проблема NHibernate, это проблема вашего интерфейса сервера. Тогда вам понадобится специальный DTO (объект передачи данных), который включает только те данные, которые необходимы клиенту.
Edit:
Я думаю, что вам нужно отложенной загрузки. Существует два разных типа ленивой загрузки. Ленивая загрузка коллекций и ленивая загрузка ссылок на отдельные объекты.
Пример:
class Employee
{
// make everything virtual to allow NH to build a proxy
public virtual string name { get; set; }
// will be lazy loaded
public virtual IList<Customers> Customers { get; private set; }
public virtual Employee Boss { get; set; }
}
Mapping
<!-- lazy=true is actually default -->
<class name="Employee" lazy="true">
<property name="Name"/>
<property name="Boss"/>
<!-- lazy=true is actually default -->
<bag name="Customers" type="Employee" lazy="true">
<key column="Employee_FK"/>
<one-to-many class="Employee" />
</bag>
</class>
Пример кода
using (ISession session = CreateSession())
using (ITransaction trx session.CreateTransaction())
{
// get a instance of an employee
// the boss and the customers are not loaded until now
Employee emp = session.Get<Employee>(empid);
// emp.Boss is a proxy. This is a subclass of employee
// generated by NH that implements the lazy loading
// this loads the boss' data
if (emp.Boss.Name == "gogogurt")
{
// this is your employee
}
// this loads the Customers
if (emp.Customers.Count == 0)
{
HumanResources.Fire(emp);
}
trx.Commit();
}
// outside the session you cannot access the lazy
// loaded properties.
Я думаю, что вам нужна ленивая загрузка. Я добавил пример моего ответа. –