Il seguente codice in un'applicazione della console di nucleo .Net (server EF core 2.0 / Sql).
var sql = _context.Set<string>()
.FromSql("select dbo.FunctionReturnVarchar({0});", id);
ha la seguente eccezione?
Impossibile creare un DbSet per 'string' perché questo tipo non è incluso nel modello per il contesto.
È un modo senza definire una classe con una proprietà di stringa?
.Set<TEntity>()
è per le entità supportate dal contesto.
Puoi provare una soluzione alternativa
DbConnection = connection = _context.Database.GetDbConnection();
using(DbCommand cmd = connection.CreateCommand()) {
cmd.CommandText = "select dbo.FunctionReturnVarchar(@id)";
cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.VarChar) { Value = id });
if (connection.State.Equals(ConnectionState.Closed)) { connection.Open(); }
var value = (string) await cmd.ExecuteScalarAsync();
}
if (connection.State.Equals(ConnectionState.Open)) { connection.Close(); }
Quello che ti serve in questo scenario è il metodo ExecuteSqlCommand
con parametro di output associato:
var resultParameter = new SqlParameter("@result", SqlDbType.VarChar);
resultParameter.Size = 2000; // some meaningfull value
resultParameter.Direction = ParameterDirection.Output;
_context.Database.ExecuteSqlCommand("set @result = FunctionReturnVarchar({0});", id, resultParameter);
var result = resultParameter.Value as string;