web-dev-qa-db-fra.com

Exécution d'une procédure stockée dans Entity Framework Core 2.0

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.

8
Pradeep H

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"));
        }
    }
7
Pradeep H
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

14
grabhints

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

2
nologo
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();
}
0
Ritesh Kumar