Подтвердить что ты не робот

Разница между Get <T> и Load <T>

В чем разница между Get<T>(object id) и Load<T>(object id)? Документация в значительной степени читает то же самое. Кроме того, если это имеет значение, в каких случаях я должен использовать один над другим?

4b9b3361

Ответ 1

Ссылка предоставленная Брайаном, объясняет это довольно четко. Однако разница main заключается в том, что Load не попадает в базу данных для проверки и загрузки требуемого объекта, поскольку предполагается, что вы знаете, что сущность существует. Объект, возвращаемый Load, является своего рода прокси-сервером, который лениво извлекает реальные данные при необходимости или генерирует исключение, если объект не найден.

Резюме:

  • Load следует использовать, если вы точно знаете, что существует сущность с определенным идентификатором. Вызов не приводит к попаданию базы данных (и, в некоторых случаях, может быть оптимизирован NHibernate). Остерегайтесь исключения, которое может возникать при доступе к объекту, если экземпляр объекта не существует в БД.

  • Get удаляет базу данных или кеш сеанса для извлечения данных сущности. Если сущность существует, она возвращается, в противном случае возвращается null. Это самый безопасный способ определить, существует ли сущность с определенным идентификатором. Если вы не знаете, что использовать, используйте Get.

Ответ 3

В некоторых случаях загрузка оптимизирована. Подумайте о взаимоотношениях с Клиентом, Заказчиком и предположите, что у нас есть таблица ордеров с CustomerId в качестве внешнего ключа.

var order = new Order {OrderDate = Datetime.Now };
order.Customer = session.Get<Customer>(customerId);
session.Save(order);

Хотя нам нужно только clientId для сохранения объекта заказа, над блоком кода сначала выберите клиента с этой клиентской информацией из таблицы Customers, а затем снова удалите базу данных, чтобы вставить заказ для этого клиента.

Но если мы использовали:

order.Customer = session.Load<Customer>(customerId);

будет выполнен только оператор insert с этим clientId. В этом случае загрузка является подходящим способом.

Ответ 4

Get возвращает Null, если объект не существует, тогда как Load не возвращает Null - он либо возвращает объект, либо генерирует исключение.