wake-up-neo.net

Wie führe ich eine SQL-Rohabfrage mit Entity Framework aus, ohne ein Modell verwenden zu müssen?

Ich versuche, C # ASP.NET MVC 5 zu lernen. Und ich versuche, Entity Framework für alles zu verwenden, was ich tue.

Ich muss jedoch eine unformatierte SQL-Abfrage ausführen und die Ergebnisse in ein Array zurückgeben.

Folgendes habe ich bisher getan.

Ich habe eine Kontextklasse erstellt, mit der ich eine Verbindung zu einem Server herstellen und die Datenbank zur Laufzeit ändern kann.

Hier ist meine Kontextklasse

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);
        }
    }
}

Und wie man die Verbindung hier herstellt, ist das, was ich tue

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();

Dies löst einen Fehler aus

Die Typargumente für die Methode 'System.Data.Entity.Database.SqlQuery (string, params object [])' können nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben. C: .NET-Projekte\ScripterEngine\ScripterEngine\Controllers\CampaignController.cs 42 27 ScripterEngine

Wie kann ich diese Rohabfrage ausführen?

37
Junior

Geben Sie string als Typargument an.

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