Свободный комплексный компонент NHibernate Linq - PullRequest
2 голосов
/ 13 июля 2011

Мы используем Fluent NHibernate LINQ в нашем проекте с устаревшей базой данных. Наш сценарий состоит в том, что у нас есть таблица с информацией о клиенте с адресом. Мы создали Customer и Address как отдельные объекты в C #. Адрес снова ссылается на объект почтового индекса.

При сопоставлении мы указали адрес как компонент клиента. Теперь я хочу загружать почтовый индекс (на который ссылается адрес) при получении Customer, чтобы избежать выбора N + 1.

Когда я пытаюсь написать Fetch(customer => customer.Address.ZipCode), он говорит, что это слишком сложно. Я не могу сделать Fetch(customer => customer.Address).ThenFetch(address => address.ZipCode), так как Адрес хранится в той же таблице, что и Клиент.

Есть ли способ решить эту проблему?

1 Ответ

2 голосов
/ 14 декабря 2011

к сожалению, кажется, что Linq-провайдер не может справиться с этой ситуацией. Так что либо вы используете критерии, либо API QueryOver

session.CreateCriteria<Customer>()
    .SetFetchMode("Address.ZipCode", FetchMode.Eager)
    .List();

session.QueryOver<Customer>()
    .Fetch(u => u.Address.ZipCode).Eager
    .List();

Или отключите LazyLoading ZipCode в Mappings

...