Подтвердить что ты не робот

Как выполнить необработанный SQL-запрос с использованием Entity Framework без использования модели?

Я пытаюсь изучить С# ASP.NET MVC 5. И я пытаюсь использовать Entity Framework для всего, что я делаю.

Однако мне нужно запустить необработанный SQL-запрос и вернуть результаты в массив.

Вот что я сделал до сих пор.

Я создал свой контекстный класс, который позволяет мне подключаться к серверу, а также позволяет мне изменять базу данных во время выполнения.

Вот мой контекстный класс

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

И как сделать соединение здесь, это то, что я делаю

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

Это вызывает ошибку

Аргументы типа для метода 'System.Data.Entity.Database.SqlQuery(string, params object [])' не могут быть выведены из использования. Попробуйте явно указать аргументы типа. C:.NET Projects\ScripterEngine\ScripterEngine\Controllers\CampaignController.cs 42 27 ScripterEngine

Как выполнить этот необработанный запрос?

4b9b3361

Ответ 1

Укажите string как аргумент типа.

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