Могу ли я видеть выполнение SQL при возникновении исключения EntitySqlException или переопределить исключение EntityCommandCompilationException? - PullRequest
0 голосов
/ 11 июня 2019

Я немного провалился, пытаясь выполнить оконную функцию в Entity Framework.(Рассматриваемый проект построен на EF, но много выиграл бы от вычисления PERCENTILE_DISC на SQL Server.)

Я создаю новое соглашение и добавляю его в объектную модель для преобразования вызовов определенного метода.в SQL, который выполняет оконную функцию PERCENT_DISC.

Созданная EdmFunction имеет CommandText:

PERCENTILE_DISC (0.8) WITHIN GROUP (ORDER BY o.ExpectedPayment) OVER (PARTITION BY o.OrderType)

Но когда я делаю это для выполнения функции:

var medians = context.Set<UserLocation>().Select(x => CustomFunction.Percentile()).ToList();

Это вызывает исключение EntityCommandCompilationException со следующим сообщением:

System.Data.Entity.Core.EntityCommandCompilationException:
'An error occurred while preparing definition of the function 'ConsoleApp5.Percentile'. See the inner exception for details.'

Inner Exception:
EntitySqlException: The query syntax is not valid. Near identifier 'WITHIN', line 1, column 35.

И все же этот прямой запрос дает ожидаемые результаты:

var p80s = context.Database.SqlQuery<decimal>("SELECT DISTINCT PERCENTILE_DISC (0.8) WITHIN GROUP (ORDER BY o.ExpectedPayment) OVER (PARTITION BY o.OrderType) from Orders o").ToList();

Я подозреваю, что это связано с тем, что анализатор EF не был созданобрабатывать оконные функции.Итак, я хотел бы иметь возможность переопределить это EntityCommandCompilationException и заставить EF попытаться выполнить запрос в любом случае.В противном случае я хотел бы, по крайней мере, увидеть созданный SQL-запрос, чтобы увидеть, есть ли другая проблема, вызывающая действительно недействительный SQL-запрос.Как я могу выполнить любой из этих?

...