Почему nhibernate LINQ не поддерживает простые внешние объединения (учитывая предложение where на внешней объединенной таблице)? - PullRequest
3 голосов
/ 04 января 2011

у меня есть tableA и tableB

tableA имеет свойство B_Id .

Этот запрос работает нормально:

 IEnumerable<A> a = Session.Query<A>().Fetch(r=>r.B);

но я хочу что-то вроде:

 IEnumerable<A> a = Session.Query<A>().Where(r=>r.B.Active).Fetch(r=>r.B);

похоже, что когда я это делаю, больше не выполняется простое внешнее соединение, и если в таблице B нет активных записей,я не получаю никаких результатов.

Я хочу сделать чистое внешнее соединение, которое все равно даст мне результаты, но со свойством B объекта A, равным нулю.

Поддерживает ли nhibernate LINQ эту возможностьпредложение where на вашей внешней объединенной таблице ??

Ответы [ 2 ]

3 голосов
/ 12 января 2011

Согласно этому сообщению о группе nhusers это явно не поддерживается, и вам придется использовать HQL.

Что касается причин, я бы предположил, что авторы планируютдобавьте его, но у вас были более высокие приоритеты.Лично я бы видел это как ключевую особенность.

0 голосов
/ 05 января 2011

Угадай: .Where(a => a.B == null || a.B.Active)

Мысль: вы пытаетесь выбрать экземпляры A, которые будут в неизвестном состоянии. Как NHibernate должен отличаться между экземплярами A, где B == null и B.Active == false?

Оба будут, если это сработает, возвращать нулевые значения для B, а A будет заполняться нулевой ссылкой. Что должно произойти, если вы снова сохраните A? Должна ли ссылка на B быть нулевой? Это удалит ссылки, когда B.Active == false. Это должно быть нетронутым? Это сделало бы NHibernate хранить состояние, которое не представляет объект вашего домена.

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