You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# LINQ查询MySQL所有数据库名称的实现方案咨询

实现方案

MySQL的所有schema名称存储在系统库information_schema的SCHEMATA表中,原生LINQ无法直接查询未映射到DbContext的系统表,直接用SqlQuery执行原生SQL是最简便的实现方式,适配不同EF Core版本的代码如下:

EF Core 7.0及以上版本

EF Core 7开始支持直接返回基础类型的原生查询,无需额外定义实体:

var databaseNames = serverDataContext.Database
    .SqlQuery<string>($"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA")
    .ToArray();

EF Core 7.0以下版本

需要先做简单的配置后再查询:

  • 定义查询结果接收类
public class SchemaInfo
{
    public string SchemaName { get; set; }
}
  • 在DataContext的OnModelCreating方法中配置无键实体
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SchemaInfo>().HasNoKey();
    // 原有其他实体配置保留即可
}
  • 执行查询获取结果
var databaseNames = serverDataContext.Set<SchemaInfo>()
    .FromSqlRaw("SELECT SCHEMA_NAME AS SchemaName FROM information_schema.SCHEMATA")
    .Select(s => s.SchemaName)
    .ToArray();

补充说明:如果硬要使用LINQ实现,需要手动将information_schema.SCHEMATA表完整映射到DbContext的实体中,额外工作量大,没有实际必要。

内容的提问来源于stack exchange,提问作者GolfBravo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:54:03