如何通过 asp.net API 控制器获取所有 Table 名称的列表
How to get a list of all Table names through asp.net API controller
所以我想通过控制器从数据库中获取所有 table 名称的列表作为 ASP.net API 项目。我试图通过没有实体的原始 sql 查询来完成它,它看起来像这样。
public async Task<ActionResult<IList>> GetAllTableNames()
{
using (var context = new DbContext())
{
List<string> results = context.Database.SqlQuery<string>("SELECT name FROM sys.tables").ToListAsync();
}
}
但是当我尝试使用 SqlQuery 方法时出现错误
“'DatabaseFacade' 不包含 'SqlQuery' 的定义并且没有可访问的扩展方法 'SqlQuery'”。有人知道如何解决这个问题吗?
首先在控制器中创建一个 Helper 方法,如下所示
using System.Data.SqlClient;
public async IAsyncEnumerable<string> GetTableNamesAsync()
{
using var connection = new SqlConnection(_dbContext.Database.GetConnectionString());
var command = new SqlCommand("SELECT name FROM sys.tables",connection);
await connection.OpenAsync();
var reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
yield return reader.GetString(0);
}
}
然后像这样调用你的动作
public async Task<IActionResult> Index()
{
var list=new List<string>();
await foreach (var item in GetTableNamesAsync())
{
list.Add(item);
}
return Ok(list);
}
所以我想通过控制器从数据库中获取所有 table 名称的列表作为 ASP.net API 项目。我试图通过没有实体的原始 sql 查询来完成它,它看起来像这样。
public async Task<ActionResult<IList>> GetAllTableNames()
{
using (var context = new DbContext())
{
List<string> results = context.Database.SqlQuery<string>("SELECT name FROM sys.tables").ToListAsync();
}
}
但是当我尝试使用 SqlQuery 方法时出现错误 “'DatabaseFacade' 不包含 'SqlQuery' 的定义并且没有可访问的扩展方法 'SqlQuery'”。有人知道如何解决这个问题吗?
首先在控制器中创建一个 Helper 方法,如下所示
using System.Data.SqlClient;
public async IAsyncEnumerable<string> GetTableNamesAsync()
{
using var connection = new SqlConnection(_dbContext.Database.GetConnectionString());
var command = new SqlCommand("SELECT name FROM sys.tables",connection);
await connection.OpenAsync();
var reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
yield return reader.GetString(0);
}
}
然后像这样调用你的动作
public async Task<IActionResult> Index()
{
var list=new List<string>();
await foreach (var item in GetTableNamesAsync())
{
list.Add(item);
}
return Ok(list);
}