Частичная ленивая загрузка - PullRequest
2 голосов
/ 02 октября 2009

У меня есть один объект Пользователь, который может иметь несколько сообщений.

Пример:

Загрузка пользователя с ленивой загрузкой сообщений IList<User> users = User.LoadAll()

Затем я хочу прочитать только "половину" из users[2].Posts[3] (получить только те атрибуты, которые мне нужны, а не все из этого пост-объекта), это возможно сделать?

(Обратите внимание, я не хочу использовать просмотр).

Edit: Может ли кто-нибудь дать мне простой пример кода, пожалуйста? Я пытался найти один без успеха. Спасибо

Ответы [ 3 ]

2 голосов
/ 08 октября 2009

Если я хорошо понимаю ваш вопрос - вы хотите получить объект - Опубликовать в вашем случае - но только некоторые его свойства - например, Post.Annotation, а не Post.Content, которые являются строками.

Это НЕ возможно в данный момент. Каждый объект, извлеченный из базы данных, будет иметь все свои свойства, которые не являются ни отношениями, ни загруженными коллекциями.

Вы можете сделать обходной путь:

  1. , превратив свойства biggish в отдельную сущность, а затем сделать сопоставление много-к-одному и использование ленивых загрузка

  2. путем создания пользовательского запроса, будь то HQL или критерии с проекциями (в основном только несколько столбцов). Однако это не вернет полный объект.

Надеюсь, я правильно понял ваш вопрос ...

0 голосов
/ 02 октября 2009

Конечно.

Вам просто нужно объявить дополнительное свойство типа коллекции (например, 'map') в вашем классе 'User', установить для его атрибута 'lazy' значение false, а для атрибута 'where' - требуемое предложение SQL-where.

0 голосов
/ 02 октября 2009

Да, это возможно.

Когда NHibernate восстанавливает объект из базы данных, он также может восстанавливать все элементы объекта, создавая целый граф объектов. Это называется каскадный , это свойство ассоциации, определенной в вашем файле отображений, и по звуку вещей, которые вы не хотите. Смотрите документацию для более.

...