问题
当尝试获取传递给函数的表上的列时,出现错误
数据库外观不包含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
答案 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();