如何检索 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
我正在使用 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