当尝试获取传递给函数的表上的列时,出现错误

时间:2019-03-12 01:58:16

标签: asp.net-core-webapi asp.net-core-2.1 ado.net-entity-data-model entity-framework-core-2.1

问题

当尝试获取传递给函数的表上的列时,出现错误

数据库外观不包含SqlQuery的定义,也没有可访问的扩展 方法SqlQuery

我首先研究asp.net core 2.1 Web api代码

我尝试设计函数给此处表名称,它将返回存在于此的列

表,但出现编译错误

数据库外观不包含SqlQuery的定义,也没有可访问的扩展 方法SqlQuery

那么如何解决该错误

public class TabDbContext : DbContext
    {
        public TabDbContext(DbContextOptions<TabDbContext> options)
: base(options)
        { }

        public DbSet<Employee> Employees { get; set; }
        public DbSet<Employee> Departments { get; set; }

ON控制器API 我做如下:

public class EmployeesController : ControllerBase
    {
        private readonly TabDbContext _context;

        public EmployeesController(TabDbContext context)
        {
            _context = context;
        }
 public List<string> GetColumnNames(string tablename)
        {

                var sql = "select COLUMN_NAME from information_schema.COLUMNS where table_name = @TableName";
                SqlParameter sqlParameter = new SqlParameter("TableName", tablename);
                var query = _context.Database.SqlQuery<string>(sql, sqlParameter).ToList();
                return query;

        }

预期结果

Employees表具有两列EmployeeId,EmployeeName

以GetColumnNames(Employees)调用函数

将返回

EmployeeId

EmployeeName

1 个答案:

答案 0 :(得分:0)

您可以使用FromSql扩展方法基于EF Core 2.1中的原始SQL查询来开始LINQ查询:

https://docs.microsoft.com/en-us/ef/core/querying/raw-sql

然后您的代码将进行如下修改:

var sqlParameter = new SqlParameter("TableName", tablename);
var employees= _context.Employees
               .FromSql("select COLUMN_NAME from information_schema.COLUMNS where table_name = @TableName", sqlParameter )
               .ToList();