Nhibernate Ленивая загрузка набора не работает - PullRequest
0 голосов
/ 11 октября 2011

Я использую nhibernate2.1 как часть spring.net 1.3.У меня есть следующее объявление как часть моего отображения.Насколько я понимаю, этот объект не должен загружаться, если не вызывается геттер.У меня есть точка останова, установленная на сеттере, а также выгрузка всех операторов SQL nhibernate в регистратор.В ходе моего тестирования я фактически создал совершенно новый дочерний объект и совершенно новое свойство для моего исходного объекта (отсюда и «2» в именах), поэтому я уверен, что свойство нигде не доступно.Несмотря на это, как только мой родительский объект загружается, я могу убедиться, что это свойство загружено.Итак ... что мне здесь не хватает?

<set name="UserCustomer2" lazy="true">
    <key column="[FK_USERS]" />
    <one-to-many class="UserCustomer2" />
</set>

@ A: вот мое свойство:

private ICollection<UserCustomer2> _UserCustomer2 = new HashSet<UserCustomer2>();
public virtual ICollection<UserCustomer2> UserCustomer2
{
    get { return _UserCustomer2; }
    set { this._UserCustomer2 = value; }
}

и вот как я запрашиваю родительский объект:

IQuery query = dao.GetQuery("FROM UserImpl u WHERE u.UserName = :username AND u.Password = :password");
query.SetParameter("username", username);
query.SetParameter("password", password);
IList users = query.List();

1 Ответ

0 голосов
/ 12 октября 2011

@ dotjoe, ты привел меня на правильный путь.Я протестировал довольно много сценариев и на основе точек останова и зарегистрированных операторов SQL, которые я определил, что установка точек останова НЕ вызывает ленивую загрузку.Однако, когда вы наводите указатель мыши на свойство, чтобы осмотреть его в режиме отладки, оно фактически гидратирует объект.Я предполагаю, что это имеет смысл, но я предполагал, что когда я осматривал объект, я бы просто увидел объект-посредник вместо полностью гидратированного объекта.Я удивлен, что действие режима отладки вызовет ленивую загрузку - я предполагал, что это будет вызвано только из реального кода приложения.Еще одна вещь, которая меня интересует, это то, что установщик ВСЕГДА вызывается и только что передал прокси-объект, или если он вызывался только потому, что я установил точку останова в установщике.Я бы предположил первое, но пока мои предположения были неверны.Если кто-то может дать некоторые идеи, мне очень любопытно, как это на самом деле работает за кулисами.

...