如何通过 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);
    }