Avoir un scénario pour exécuter une procédure stockée et lire la valeur de retour dans EF Core, qui renvoie une seule valeur.
J'ai essayé avec ce code, mais cela ne fonctionne pas. Je comprends que ExecuteSqlCommand
ne fonctionne pas pour select et ne peut être utilisé que pour la mise à jour de la base de données.
var test = context.Database.ExecuteSqlCommand("SPName");
La procédure stockée a juste une instruction select comme Select 'somevalue'
Vous recherchez une alternative pour obtenir des données que la procédure stockée renvoie.
Capable de résoudre mon problème avec le code ci-dessous. Ceci est basé sur les suggestions données dans les réponses ci-dessous.
using (var command = context.Database.GetDbConnection().CreateCommand())
{
command.CommandText = "StoredProcedureName";
command.CommandType = CommandType.StoredProcedure;
context.Database.OpenConnection();
var dataReader = command.ExecuteReader();
if (dataReader.Read())
{
string _test = dataReader.GetString(dataReader.GetOrdinal("ColumnName"));
}
}
DbCommand cmd = ctx.Database.GetDbConnection().CreateCommand();
cmd.CommandText = "SPName";
cmd.CommandType = CommandType.StoredProcedure;
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Open();
}
return await cmd.ExecuteNonQueryAsync();
Voici un article à ce sujet: https://nodogmablog.bryanhogan.net/2016/07/entity-framework-core-and-calling-a-stored-proceduce/#comment-60582
Jetez un œil à la documentation de MS: https://docs.Microsoft.com/en-us/ef/core/querying/raw-sql
var blog = context.Blogs
.FromSql("EXECUTE dbo.GetMostPopularBlogs")
.SingleOrDefault();
Ils ont un dépôt git plein d'exemples: https://github.com/aspnet/EntityFramework.Docs/blob/master/samples/core/Querying/Querying/RawSQL/Sample.cs
Pour utiliser les procédures stockées dans EF Core, regardez cette vidéo: https://www.youtube.com/watch?v=bX3BPSbvofE
Please follow below steps :
Step1: Create model class
public class SP_GetService
{
[Key]
public int ServiceId { get; set; }
public string ServiceAcronym { get; set; }
public string ServiceDescription { get; set; }
}
Step2: Create dbset in context file
public virtual DbSet<SP_GetService> SP_GetServices { get; set; }
Step3 : execute procedure
using (var _context = new SampleContext())
{
var data = _context.SP_GetServices.FromSql("EXECUTE GetService @Param={0}", "value").ToList();
}