Cześć,
czy da się w EFCore 5 wywołać z poziomu DbContext funkcję znajdującą się na PostgreSql i zwrócić jej wynik? Niestety ktoś zamiast stored procedure, użył function.
Mam funkcję która przyjmuje kilka parametrów i dodaje nowy el. do tabelki i zwraca jego ID, ale nie wiem jak ją wywołać z C#, ExecuteSqlRaw zwraca jedynie ilość wierszy :/
0
1
Może komuś się przyda ogarnąłem w ten sposób:
public async Task<List<T>> ExecuteSqlCommandAsync<T>(string sql, Func<DbDataReader, T> map)
{
List<T> resultList = new List<T>();
using (DbCommand command = this.Database.GetDbConnection().CreateCommand())
{
command.CommandText = sql;
command.CommandType = System.Data.CommandType.Text;
await this.Database.OpenConnectionAsync();
using (DbDataReader result = await command.ExecuteReaderAsync())
{
if (result.HasRows)
{
while (await result.ReadAsync())
{
resultList.Add(map(result));
}
return resultList;
}
}
}
return null;
}
Przykład użycia:
string sql = $"select f_testfunction('Args1', 'Args2')";
List<int> result = await ExecuteSqlCommandAsync<int>(sql, x => (int)x[0]);