Вложенный запрос Linq с помощью NHibernate - PullRequest
1 голос
/ 08 июля 2010

Когда я пытаюсь запустить эту логику, NHibernate возвращается с ошибкой, заявляющей, что не имеет ссылки на «Сайт».

IQueryable<Product> query = this.RetrieveAll();    
query = query.Where(x => x.Status == Product.Statuses.Approved || x.SiteProduct.Where(y => y.Site.ID == siteID).Count() > 0);

Немного фона. Продукт имеет карту «один ко многим» на сайте ProductProduct SiteProduct имеет карту «один ко многим» на сайт

Даже у более простой версии есть проблемы, в которых говорится, что она не имеет ссылки на ID:

IQueryable<Product> query = this.RetrieveAll();    
query = query.Where(x => x.Status == Product.Statuses.Approved || x.SiteProduct.Where(y => y.ID > 0).Count() > 0);

Есть ли у NHibernate проблемы с вложением операторов "Где" внутри себя?

Что касается отображений таблиц, то они кажутся правильными, поскольку я могу пройти весь путь вниз и захватить отдельные записи внизу с помощью отложенной загрузки. Добавление, получение и удаление записей все работает отлично. У меня просто проблемы с вложением моего запроса Linq.

1 Ответ

3 голосов
/ 07 февраля 2011

Это было бы намного проще, если бы у меня был ответ на этот вопрос.

Что я узнал методом проб и ошибок ...

Видимо, при ленивой загрузке это было не таквозвращаясь и загружая связанные таблицы, на которые я ссылался.Это приводило к нулевой ошибке и не давало мне ссылки на ошибку «Site».

Когда я переключил загрузку с отложенной загрузки на нетерпеливую загрузку, ошибка исчезла.

Так что моральэта история такова, что если ссылка на таблицу, в которой вы пытаетесь использовать вложенный оператор Statement, имеет значение null, вы получите эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...