如何检索 SQL 服务器 LocalDb 名称的列表?

How can I retrieve a list of SQL Server LocalDb names?

我正在使用 Entity Framework 和 SQL Server LocalDb 作为我的应用程序的存储介质。我需要找到一种在具有相同 SQL 结构的不同数据库之间切换的方法。

我的想法是从 DbContext 执行此操作:

public const bool RecreateDB = false;

public UnifiedContext() : this(RecreateDB) { }
public UnifiedContext(bool recreateDb):this(recreateDb, "DemoDB") { }

public UnifiedContext(bool recreateDB, string dbName) : base($"MyUniquePrefix.{dbName}")
{
    if (recreateDB)
        Database.SetInitializer(new DropCreateDatabaseAlways<UnifiedContext>());
    else
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<UnifiedContext, UnifiedConfiguration>());
}

这很好用,就像我想要的那样。但是,我现在需要显示用于加载的 LocalDbs 列表,我知道我可以使用 System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources(); 获得 SQL 数据库的列表,但这对 LocalDbs 不起作用。

如何检索 LocalDb 名称列表?

由于 LocalDb 适用于开发人员而非数据库管理员,因此数据库存储在一个文件夹中。

通常这个文件夹是

C:\Users\User\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB

每个以 .mdf 结尾的文件都是一个数据库。

不幸的是 - afaik- 没有内置机制来招募它们,因为 localDb 是基于文件的,你可以想要的任何地方保存它。

可以连接到master数据库,并且运行:

SELECT name FROM sys.databases