首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在不使用模型的情况下使用实体框架执行原始SQL查询?

如何在不使用模型的情况下使用实体框架执行原始SQL查询?
EN

Stack Overflow用户
提问于 2016-02-04 02:08:28
回答 1查看 85.3K关注 0票数 46

我正在尝试学习C# ASP.NET MVC5,并且我正在尝试在我所做的一切中使用实体框架。

但是,我需要运行一个原始SQL查询并将结果返回到一个数组中。

以下是我到目前为止所做的工作。

我创建了我的context类,它允许我连接到服务器,还允许我在运行时更改数据库。

下面是我的context类

代码语言:javascript
复制
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);
        }
    }
}

如何在这里建立连接是我要做的

代码语言:javascript
复制
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(

,params object[])’的类型参数无法从用法中推断出来。尝试显式指定类型参数。C:.NET Projects\ScripterEngine\ScripterEngine\Controllers\CampaignController.cs 42 27 ScripterEngine

如何执行这个原始查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-04 02:12:00

指定string作为类型参数。

代码语言:javascript
复制
var results = db1New.Database.SqlQuery<string>("SELECT LOWER(column_name) AS column_name FROM information_schema.columns WHERE table_name = @p0", tableName).ToArray();
                                       ^^^^^^
票数 59
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35184476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档