Другой запрос после nhibernate 5 (с использованием оракула) - PullRequest
0 голосов
/ 24 сентября 2019

После обновления с 4.1 до 5.2 nhibernate создает запрос немного по-другому, помещая «ИЛИ» там, где он не приветствуется.

4.1

...,
...,   
(select cast(count(guia5_.ID) as NUMBER(10, 0))
  from SAM_GUIA guia5_

 where guia5_.PEGID = peg1_.ID                        <<<<<<<<<<<<<<<

) as col_41_0_,

5.x

...,
...,   
(select cast(count(guia5_.ID) as NUMBER(10, 0))
   from SAM_GUIA guia5_

  where guia5_.PEGID = peg1_.ID                        <<<<<<<<<<<<<<<
     or (guia5_.PEGID is null)                         <<<<<<<<<<<<<<<
    and (peg1_.ID is null)                             <<<<<<<<<<<<<<<

) as col_41_0_,  

Связанный запрос linq:

...,
...,
RecordCount = (from c in repositoryGuia.All()
           where c.PegId == b.Id
           select c.Id
           ).Count(),

Дополнительная информация о отображении:

  • c.PegId: int?
  • b.Id: int

Использование NHibernate 5.2.6 и Fluent 2.1.2.

Почему версия 5 переводит другой оператор SQL?

1 Ответ

2 голосов
/ 24 сентября 2019

Это известная проблема 5.x GH-1860 .Подробности, когда и почему меняется поведение, объяснены здесь .На самом деле, для LINQ нет обходного пути, поэтому вы должны использовать hql / QueryOver, если это для вас showtopper.

Но есть открытый запрос на получение здесь , который должен исправить это поведение.Так что, возможно, в 5.3 это будет исправлено.

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