NHibernate и "анонимные" сущности - PullRequest
1 голос
/ 09 июня 2011

У меня есть эти объекты:

public class Parent
{
    public int Foo { get; set; }
    public Child C { get; set; }
}

public class Child
{
    public string Name { get; set; }
}

У меня есть запрос, который выбирает все родительские объекты из базы данных. Затем я сохраняю их в памяти и фильтрую с помощью запросов LINQ.

Я заметил, что когда я выполняю запрос к БД, NH выбирает все родительские объекты в одном запросе (и, конечно, заполняет свойство Foo), и для каждого родительского объекта, к которому я обращаюсь с помощью LINQ, NH выбирает информацию о каждом дочернем объекте.

Как можно получить всю необходимую информацию в одной уникальной БД и использовать данные с LINQ без нее для генерации дополнительных отключений БД?

Должен ли я использовать AliasToBeanResultTransformer? Если это так, я должен создать DTO, который будет хранить информацию, например:

public class ParentDTO
{
    public int Foo { get; set; }
    public string ChildName { get; set; }
}

или я все еще должен использовать родительский класс?

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 10 июня 2011

Вы можете с готовностью загрузить дочерние элементы для этого запроса следующим образом (используя синтаксис QueryOver)

public IList<Parent> FindAllParentsWithChildren()
{
  ISession s = // Get session
  return s.QueryOver<Parent>()
    .Fetch(p => p.C).Eager
    .List<Parent>();
}

В качестве альтернативы можно изменить файлы HBM, чтобы указать, что дочерние элементы загружаются по умолчанию.Тогда вам не нужно будет изменять ваш запрос.

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

Вы должны указать NHibernate не использовать отложенную загрузку для отношений между родительским и дочерним объектами.

...