NHibernate LazyLoad Индивидуальная собственность при доступе - PullRequest
4 голосов
/ 21 апреля 2011

У меня есть карта сущностей, где у меня есть три свойства, помеченные для Lazy-Loading. Я ожидал бы, что когда я получу доступ к отдельному свойству (например, Thumbnail), тогда будут загружены только данные этого свойства. Однако, похоже, что NHibernate загрузит все свойства, помеченные как LazyLoaded, если к любому из этих свойств будет получен доступ (то есть, доступ к Thumbnail также загружает данные HighRes и LowRes).

Есть ли способ изменить это поведение?

public sealed class LeakImageMap : ClassMap<LeakImageEntity>
{
  public LeakImageMap()
  {
    LazyLoad();
    Table("LeakImage");
    Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);

    Map(x => x.FileName).Not.Nullable();
    Map(x => x.FileSize).Not.Nullable();
    Map(x => x.LeakId).Nullable();

    Map(x => x.Thumbnail).Not.Nullable().LazyLoad();
    Map(x => x.HighRes).Not.Nullable().LazyLoad();
    Map(x => x.LowRes).Not.Nullable().LazyLoad();
  }
}

Дополнительная информация

Доступ к изображению. Миниатюра генерирует следующий SQL:

SELECT
    leakimagee_.Thumbnail as Thumbnail14_,
    leakimagee_.HighRes as HighRes14_,
    leakimagee_.LowRes as LowRes14_ 
FROM
    Hvcs.LeakImage leakimagee_ 
WHERE
    leakimagee_.Id=@p0;
@p0 = 7588d167-22b5-4f2e-b640-9ecb00ed9138 [Type: Guid (0)]

Однако, просто хотите иметь следующее:

SELECT
    leakimagee_.Thumbnail as Thumbnail14_
FROM
    Hvcs.LeakImage leakimagee_ 
WHERE
    leakimagee_.Id=@p0;
@p0 = 7588d167-22b5-4f2e-b640-9ecb00ed9138 [Type: Guid (0)]

Ответы [ 2 ]

4 голосов
/ 21 апреля 2011

А как насчет нескольких ленивых свойств?NHibernate поддерживает их, но нужно помнить одну вещь.NHibernate загрузит все ленивые свойства объекта, а не только тот, к которому был получен немедленный доступ.

из Lazy Properties

0 голосов
/ 26 августа 2011

Я полагаю, это происходит потому, что при извлечении одного из свойств lazyload hibernate обнаруживает, что он также может получить другие как побочный продукт (столбцы в таблице без различий, отличающихся от интересующего) из оператора SQL, который он генерирует, и т.д.он решает, почему бы не заполнить эти оставшиеся свойства всеми этими данными, которые пригодятся.(как я заметил в этом случае все соответствующие поля отображаются как «Карта», так что приведенные выше предположения могут применяться, хотя все еще не уверен, правильно ли я понял или нет)

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