web-dev-qa-db-fra.com

Comment exécuter une requête SQL brute avec Entity Framework sans avoir à utiliser de modèle?

J'essaie d'apprendre C # ASP.NET MVC 5. Et j'essaie d'utiliser Entity Framework pour tout ce que je fais.

Cependant, je dois exécuter une requête SQL brute et renvoyer les résultats dans un tableau.

Voici ce que j'ai fait jusqu'à présent.

J'ai créé ma classe de contexte qui me permet de me connecter à un serveur et me permet également de modifier la base de données au moment de l'exécution.

Voici ma classe de contexte

using ScripterEngine.Models;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Core.EntityClient;
using System.Data.SqlClient;
using System.Linq;
using System.Web;

namespace ScripterEngine.DataAccessLayer
{
    public class BaseContext : DbContext
    {
        protected string connectionName;
        public DbSet<Campaign> Campaign { get; set; }

        /**
         * Created the connection to the server using the giving connection string name
         * 
         * @param connName
         */
        public BaseContext(string connName = "BaseConnection")
            : base(connName)
        {
            connectionName = connName;
        }

        /**
         * Changes the default database
         * 
         * @param databaseName
         */
        public BaseContext setDatabase(string databaseName)
        {
            var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;

            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);

            //change the database before creating the new connection
            builder.InitialCatalog = databaseName;

            string sqlConnectionString = builder.ConnectionString;

            return new BaseContext(sqlConnectionString);
        }
    }
}

Et comment faire la connexion voici ce que je fais

BaseContext db1 = new BaseContext("server1");
var db1New = db1.setDatabase("someTableName");
string tableName = "SomeTableName";

var results = db1New.Database.SqlQuery("SELECT LOWER(column_name) AS column_name FROM information_schema.columns WHERE table_name = @tableName", tableName).ToArray();

Cela jette une erreur

Les arguments de type de la méthode 'System.Data.Entity.Database.SqlQuery (chaîne, params object [])' ne peuvent pas être déduits de l'utilisation. Essayez de spécifier explicitement les arguments de type. C: Projets .NET\ScripterEngine\ScripterEngine\Controllers\CampaignController.cs 42 27 ScripterEngine

Comment puis-je exécuter cette requête brute?

37
Junior

Spécifiez string comme argument de type.

var results = db1New.Database.SqlQuery<string>("SELECT LOWER(column_name) AS column_name FROM information_schema.columns WHERE table_name = @p0", tableName).ToArray();
                                       ^^^^^^
48
Mark Cidade