Это еще одна проблема, представленная EF C 3, отслеживаемая # 18232: невозможно использовать хранимые процедуры, связанные с сущностями, которые наследуют другую .
Причина в том, что Вызовы SP не являются составными, и EF Core всегда пытается составить SQL для базовых объектов TPH, чтобы добавить условие дискриминатора. Подобно глобальным фильтрам запросов, но там вы можете по крайней мере использовать IgnoreQueryFilters
, тогда как здесь у вас нет выбора.
Хорошая новость заключается в том, что это уже исправлено в репозитории EF C. Плохая новость заключается в том, что он не будет выпущен до EF C 5.0.
Поскольку AsEnumerable()
не помогает, все, что вы можете сделать, - это ждать EF C 5.0. Или, если возможно, конвертируйте такие SP в TVF (табличные функции), которые можно компоновать. В общем, используйте скалярные функции или хранимые процедуры с выходным параметром (ами) для вызовов, не возвращающих запрос (для выполнения с ExecuteSql*
), и табличные функции для вызовов, возвращающих один запрос (для использования с FromSql*
). Обратите внимание, что в настоящее время EF C в любом случае не поддерживает множественные запросы, возвращающие хранимые процедуры.