Не загружать ассоциации без прокси в NHibernate - PullRequest
1 голос
/ 20 мая 2010

Мне не нравится идея прокси и отложенной загрузки.Мне это не нужно.Я хочу чистого POCO.И я хочу явно контролировать ассоциации загрузки, когда мне нужно.

Вот сущность

public class Post
{
 public long Id { get; set; }
 public long OwnerId { get; set; }
 public string Content { get; set; }

 public User Owner { get; set; }
}

и отображение

<class name="Post">
    <id name="Id" />
    <property name="OwnerId" />
    <property name="Content" />
    <many-to-one name="Owner" column="OwnerId" />
</class>

Однако, если я укажу lazy = "false"в сопоставлении владелец всегда охотно выбирается.Я не могу удалить сопоставление многие-к-одному, потому что это также отключает явную загрузку или запрос типа

from x in session.Query<Post>()
where x.Owner.Title == "hello"
select x;

Я указал lazy = "true" и установил для свойства use_proxy_validator значение false.Но это также нетерпеливо загружает владельца.

Есть ли способ загрузить только сущность Post?

Ответы [ 3 ]

0 голосов
/ 21 мая 2010

Установите класс User на lazy = false на отображении

<class name="User" table="Users" lazy="false">
0 голосов
/ 21 мая 2010

Удалите это свойство <property name="OwnerId" /> ... чтобы получить идентификатор владельца, который вы можете использовать Owner.Id. Это не вызовет ленивую нагрузку. Владелец будет загружен, только если вы нажмете любое свойство, кроме идентификатора. Чтобы сделать его простым / простым POCO, вы можете использовать проекции и ResultTransformers.

Дэви Брион - все должно быть виртуально с NHibernate

0 голосов
/ 21 мая 2010

Короче говоря, это невозможно при использовании стандартного NH.Но вот попытка ленивой загрузки без прокси

http://thinkbeforecoding.com/post/2009/02/07/Lazy-load-and-persistence-ignorance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...