问题
当试图获取传递给函数的表上的列时,我得到错误
Database Facade不包含SqlQuery的定义,也没有可访问的扩展方法SqlQuery
我首先在asp.net core 2.1 web api代码上工作
我尝试设计函数给这里的表名,它将返回列存在此
表但我得到编译错误
Database Facade不包含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; }
在控制器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 Table有两列EmployeeId,EmployeeName
将函数调用为GetColumnNames(Employees)
将返回
员工ID
员工姓名
您可以使用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();