我正在try 学习C#ASP.NETMVC5,并且我正在try 在我所做的一切中使用实体框架.

但是,我需要运行一个原始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();

这会抛出一个错误

方法"系统"的类型参数.数据实体数据库无法从用法推断SqlQuery(string,params object[]).try 显式指定类型参数.C:.NET项目\ScripteEngine\ScripteEngine\Controllers\ActivationController.cs 42 27脚本引擎

我如何执行这个原始查询?

推荐答案

指定string作为类型参数.

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

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

ASP.NET MVC forEach 循环仅返回 1 个值

C# - 将 xyz 平铺转换为纬度/经度,反之亦然,给出不同的结果

在 AppConfig.json 中存储对象的最佳方式

如何在 ASP.Net Core 中验证上传的文件

如何正确配置 IHttpModule?

捕获对 ASP.NET ASMX Web 服务的 SOAP 请求

在 appSettings 中存储字符串数组?

获取没有主机的 url 部分

我可以在 Visual Studio 2010 中将任务列表项添加到 csHTML 吗?

如何从 asp:Repeater 循环遍历项目模板中的项目?

RestSharp 不反序列化 JSON 对象列表,始终为 Null

ASP.NET vNext 与主机无关,这意味着什么?

将数据表导出到 Excel 文件

实体框架:如何解决外键约束可能导致循环或多个级联路径?

如何防止aspxerrorpath作为查询字符串传递给 ASP.NET 自定义错误页面

为什么 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

使用 Twitter Bootstrap 在 @html.actionlink 中显示 html

如何将我的 DDD 模型中的用户与身份验证用户集成?

ExecuteReader:连接属性尚未初始化