Например, скажем, у меня есть две таблицы, Product
и Order
. Продукт имеет ID
, Name
, Description
, Cost
и другие подробные столбцы. В заказе есть столбцы ID
и ProductID
(предполагается, что заказ может содержать только один продукт).
При отображении списка заказов в системе я хотел бы также отобразить имя связанного продукта без всех других данных (т. Е. Быстро загрузить заказ и имя связанного с ним продукта и лениво загрузить весь другой продукт свойства):
SELECT o.ID, o.ProductID, p.Name FROM Order o JOIN Product p ON o.ProductID=p.ID
Если я делаю это с NHibernate, у меня есть два варианта: полная загрузка или отложенная загрузка.
При энергичной загрузке я получаю что-то вроде:
SELECT o.ID, o.ProductID, p.ID, p.Name, p.Description, p.Cost, p.... FROM Order JOIN Product p ON o.ProductID=p.ID
При ленивой загрузке я получаю что-то вроде:
SELECT o.ID, o.Product ID from Order
....
SELECT p.Name, p.Description, p.Cost, p.... FROM Product p WHERE p.ID=?
Обновление
Вот более конкретный пример того, чего я пытаюсь достичь. Я работаю с существующим DAL и пытаюсь интегрировать NHibernate. Одной из функций текущего DAL является то, что он позволяет получать некоторую базовую информацию о внешнем ключе как часть родительской записи. Допустим, есть таблица User
и таблица Region
. У каждого пользователя есть внешний ключ к региону, в котором он находится. При отображении информации о пользователе в графическом интерфейсе имя региона должно отображаться вместе с пользователем, но другие сведения о регионе не нужны.
В текущем DAL доменный объект User
имеет член типа ForeignKeyReference<Region>
.
public class ForeignKeyReference<T>
{
public virtual int ForeignKeyID { get; set; }
public virtual string ForeignNaturalKey { get; set; }
public virtual T Reference { get; set; }
}
Когда User
извлекается из базы данных, первичные и естественные ключи для Region
также извлекаются, а Reference
устанавливается в качестве прокси-объекта. Я хотел бы упростить это с NHibernate, но по-прежнему поддерживать эту функциональность. Например, я хотел бы удалить член ForeignKeyReference<Region>
и просто иметь член Region
, который является прокси-сервером NHibernate. На этом прокси я хотел бы иметь возможность получить идентификатор и имя без необходимости повторного обращения к базе данных.