Я пытаюсь переместить нашу текущую базу данных SQL Server в PostgreSQL с .net Core 2.2.
Я преобразовал все таблицы (ограничения, индексы), представления и хранимые процедуры в Postgre SQL. Я сохранил всю конфигурацию Dbset (кроме строки подключения) для моделей данных на сервере.
У меня проблема с запуском хранимой процедуры (в Postgres) в EF Core. Хранимая процедура возвращает представление. Попробуйте сопоставить это представление с DbSet методом FromSql()
из Ef Core. Он работал с SQL Server до
Хранимая процедура в Postgre SQL:
CREATE OR REPLACE FUNCTION public.getbyusername_vw_sys_menu_lang()
RETURNS SETOF "VW_SYS_MENU_LANG"
LANGUAGE sql
AS $$
--return query
SELECT M.* FROM "VW_SYS_MENU_LANG" M
where M."USERNAME" = 'Admin' -- parameters will be added
limit 10;
$$;
Я получил ошибку в .net Core:
В результатах операции FromSql не было обязательного столбца «ID».
var sql = "SELECT GETBYUSERNAME_VW_SYS_MENU_LANG()";
//var sql = "SELECT * FROM VW_SYS_MENU_LANG" //it works with view
var result1 = dbSet.FromSql(sql) //error : The required column 'ID' was not present in the results of a 'FromSql' operation.
MyDbcontext: DbContext
....
....
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<VW_SYS_MENU_LANG>(e => { e.HasKey(t => new { t.ID, t.LANG }); });
В postgres я могу запускать хранимую процедуру без ошибок, и она возвращает ожидаемый результат, а столбец ID существует с заглавными буквами. Я преобразовал все таблицы и имена столбцов как заглавные буквы.
Я думаю, что-то должно быть отредактировано в классе DbContext в хранимой процедуре EF Core или Postgres.
------------ ОБНОВЛЕНИЕ -------------
Немного смутился, я использовал Dbeaver для создания и тестирования таблиц PostgreSQL, функций и т. Д.
Когда я запускаю SELECT GETBYUSERNAME_VW_SYS_MENU_LANG () функция на Dbeaver возвращает таблицу со всеми столбцами и данными:
![Bbeaver](https://i.stack.imgur.com/urojC.png)
Когда я запускаю ту же функцию на Pgadmin , результат будет:
![enter image description here](https://i.stack.imgur.com/KNarJ.png)