Nhibernate Ленивая нагрузка на несколько столбцов - PullRequest
2 голосов
/ 24 ноября 2011

Если я установлю LazyLoad для нескольких столбцов свойств с помощью NHiberante и получу доступ к этим свойствам один за другим, будет ли он запрашивать базу данных для каждого свойства?
Пример:

public class Product
{
    public virtual int ID {get; set;}
    public virtual string Name {get; set;}
    public virtual string FullName {get; set;}
    public virtual float Price {get; set;}
}

public class ProductMap : ClassMap<Product>
{
    Id(p => p.ID);
    Map(p => p.Name).Not.LazyLoad();
    Map(p => p.FullName).LazyLoad(); // Redundant - I know...
    Map(p => p.Price).LazyLoad();    // Redundant - I know...
}

если я сделаю запрос к БД следующим образом:

var product = session.Load<Prodct>(2);
if (product.FullName == "*" && product.Price = 111)

Будет ли 3 запроса

  1. Товарный объект
  2. Свойство FullName
  3. Цена объекта

или когда NHibernate запросит у БД полное имя, он запросит все столбцы строки?

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

будет 2 запроса

  1. Сущность продукта
  2. Все свойства LazyLoaded
2 голосов
/ 24 ноября 2011

NHibernate загрузит все ленивые свойства объекта в одном запросе (вы можете попробовать сами ...)

Основным вариантом использования этой функции являются BLOB-объекты.

Lazy ссылки , с другой стороны, загружаются по мере необходимости.

В качестве примечания session.Load не запрашивает БД;он просто создает прокси, который будет загружаться лениво.Используйте session.Get.

...