Вопрос о ленивой загрузке - PullRequest
0 голосов
/ 23 апреля 2011

Я использую nhibernate и у меня есть вопрос.

Скажем, у меня есть объект (ObjectA), который имеет некоторое отношение к другому объекту (ObjectB).

ObjectA -> TableA
ObjectB -> TableB

Теперь я делаюзапрос и получить результаты из TableA, и теперь он находится в ObjectA.

Если бы я сделал это

int b = ObjectA.ObjectB.ColumnA;

, он бы сработал и запустил запрос, верно?Поскольку он выполняет отложенную загрузку.

, что произойдет, если я сделаю это

int b1 = ObjectA.ObjectB.ColumnA;
int b2 = ObjectA.ObjectB.ColumnA;
int b3 = ObjectA.ObjectB.ColumnA;
int b4 = ObjectA.ObjectB.ColumnA;

, все это в методе метода один за другим.Вы бы пошли и сделали 5 запросов, или он просто сделал бы один?

Как насчет того, если бы я сделал это

  int b1 = ObjectA.ObjectB.ColumnA;
  string b2 = ObjectA.ObjectB.ColumnB;

, это бы запустило 2 запроса или один?

Ответы [ 2 ]

6 голосов
/ 24 апреля 2011

Все эти методы приводят к одному вызову для загрузки ObjectB.

После этого он находится в памяти;с чего бы это снова пошло в БД?

1 голос
/ 25 апреля 2011

Это также зависит от отображения Nhibernate, упомянутого для ColumnA и ColumnB для ObjectB. Если они сопоставлены с отдельным классом / сущностью с ленивой загрузкой, установленной в значение true, то при загрузке объекта B сопоставленные сущности ColumnA и ColumnB не загружаются. Они будут загружены Nhibernate только при обращении к ним.

...