2009-10-02 4 views
2

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

Пример:

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

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

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

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

ответ

2

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

В настоящее время это невозможно. Каждый объект, полученный из базы данных, будет иметь все свои свойства, которые не связаны ни с отношениями, ни с коллекциями.

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

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

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

Надежда Я получил свой вопрос прямо ...

+0

Да, это был мой вопрос, быть в состоянии от отложенной загрузки получить только некоторые свойства от этого объекта, а не все. Мне было интересно, найдет ли команда NHibernate какой-то способ создать «обычное ленивое сопоставление загрузки», позволяющее иметь более одного способа загрузить один объект (полный, часть его). – Dryadwoods

-2

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

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

-1

Несомненно.

Вам просто нужно объявить дополнительное свойство типа коллекции (например, «карта») в вашем классе «Пользователь», установить его «ленивый» атрибут в значение false и атрибут «где» в требуемое предложение SQL-where ,