Sto cercando di eseguire una procedura memorizzata asincronizzata non selezionabile in EF Core 2.1.
return Ok(
await db.Set()
.FromSql($"EXECUTE PROCEDURE MY_PROC({id})")
.ToListAsync());
Errore :
Gli argomenti di tipo per il metodo 'DbContext.Set ()' non possono essere dedotti dall'utilizzo. Prova a specificare esplicitamente gli argomenti del tipo
Ho anche provato:
return Ok(
await db.MYDB
.FromSql($"EXECUTE PROCEDURE MY_PROC({id})")
.ToListAsync());
Errore :
500 (Errore interno del server) nella console
Poi ho provato a creare un metodo statico:
public static async Task ExecSqlNonQuery(Entities db, string sql)
{
using (var com = db.Database.GetDbConnection().CreateCommand())
{
com.CommandText = sql;
com.CommandType = CommandType.StoredProcedure;
db.Database.OpenConnection();
await com.ExecuteNonQueryAsync();
};
}
....
return Ok( await ExecSqlNonQuery(db,$"EXECUTE PROCEDURE MY_PROC({id})");
ma con questo codice, ottengo:
Argomento 1: impossibile convertire da 'void' a 'object'
funziona solo in modo non asincrono e vecchio stile:
public static bool ExecSqlNonQuery(Entities db, string sql)
{
try
{
using (var com = db.Database.GetDbConnection().CreateCommand())
{
com.CommandText = sql;
com.CommandType = CommandType.StoredProcedure;
db.Database.OpenConnection();
com.ExecuteNonQuery();
return true;
};
}
catch (Exception)
{
return false;
}
}
......
return Ok(ExecSqlNonQuery(db, $"EXECUTE PROCEDURE MY_PROC({id})"););
Qualsiasi aiuto? Grazie
FromSql
metodo FromSql
è per record set (query) che restituisce comandi SQL. Per altri tipi di comandi, è necessario utilizzare alcuni degli overload del metodo ExecuteSqlCommand
o ExecuteSqlCommandAsync
.
Esegue l'SQL specificato rispetto al database e restituisce il numero di righe interessate.
Ad esempio (supponendo che la sintassi SQL sia corretta):
await db.Database.ExecuteSqlCommandAsync($"EXECUTE PROCEDURE MY_PROC({id})");
return Ok();