Sfortunatamente la mia applicazione EF deve chiamare stored procedure che non sono in grado di modificare. Anche se questo non è l'ideale, normalmente posso aggirarlo. Tuttavia, ho un proc memorizzato che restituisce qualcosa. Come si comporta il core EF con questo? So che nelle versioni precedenti potresti eseguire ExecuteNonQuery ma non sono riuscito a trovare nulla di simile in EF Core.
Di solito eseguo le mie query tramite un helper in quanto tale, dove T è una classe che esegue il mapping a un tipo di ritorno che EF può serializzare in:
context.Set<T>()
.AsNoTracking()
.FromSql(query, args)
.ToListAsync();
Tuttavia sembra che Set richieda sempre un tipo come .Query. Nient'altro che ho visto fuori dal contesto consentirebbe di effettuare una chiamata non interrogabile. Mi sto perdendo qualcosa?
Sto usando Microsoft.EntityFrameworkCore: 1.2.0
È possibile utilizzare il metodo DbContext.DatabaseExecuteSqlCommand
using(var context = new SampleContext())
{
var commandText = "INSERT Categories (CategoryName) VALUES (@CategoryName)";
var name = new SqlParameter("@CategoryName", "Test");
context.Database.ExecuteSqlCommand(commandText, name);
}
Oppure puoi ripristinare le chiamate ADO.NET dal contesto :
using (var context = new SampleContext())
using (var command = context.Database.GetDbConnection().CreateCommand())
{
command.CommandText = "DELETE From Table1";
context.Database.OpenConnection();
command.ExecuteNonQuery();
}