基于实体框架的应用程序在从 SSMS 附加和分离后无法打开本地数据库 (.mdf)

Entity Frameowrk based application can't open local DB (.mdf) after being attached and detached from SSMS

我正在开发基于 Entity Framework 6.
的 C# WinForm 应用程序 如果数据库不存在,应用程序会创建数据库,并且可以正常保存和检索数据。
问题是,每次我将数据库附加到 SSMS 并将其分离(检查标志以关闭每个连接)时,应用程序都无法再使用该 .mdf。
它抛出 System.Data.SqlClient.SqlException:

Cannot create file '' because it already exists. Change the file path or the file name, and retry the operation. CREATE DATABASE failed. Some file names listed could not be created. Check related errors.

我可以通过以下步骤重现此行为:

为什么应用程序在附加和分离SSMS 后无法打开和使用.mdf?我该如何解决这个问题?

我唯一注意到的是 .mdf 和 .ldf 的 ACL 权限已完全更改并且继承已停用。我尝试使用 PowerShell 克隆 ACL,但即使克隆操作正常工作,应用程序也无法打开数据库。

解法: 我终于明白是怎么回事了!
尝试使用 Visual Studio Server Explorer 连接到数据库时出现此错误:...cannot be opened because it is version 869. This server supports version 852 and earlier. A downgrade path is not supported.
因此,基本上将使用旧版本的 MSSQLLocalDB 创建的数据库附加到 SSMS 2017 会静默升级数据库(我在那里找不到任何不升级的标志)。

搜索它会找到 this article

我能够通过安装 SQL Server 2017 Express LocalDB 并重新创建 LocalDB 实例来解决所有问题,如文章中所示:

现在一切正常。

尝试删除 Initial Catalog-ConnectionString 中的部分:

Initial Catalog=myApp

如果数据库不存在,您只需要此属性。

解法: 我终于明白是怎么回事了!
尝试使用 Visual Studio Server Explorer 连接到数据库时出现此错误:...cannot be opened because it is version 869. This server supports version 852 and earlier. A downgrade path is not supported.
因此,基本上将使用旧版本的 MSSQLLocalDB 创建的数据库附加到 SSMS 2017 会静默升级数据库(我在那里找不到任何不升级的标志)。

搜索它会找到 this article

我能够通过安装 SQL Server 2017 Express LocalDB 和 re-creating LocalDB 实例来解决所有问题,如文章中所示:

  • 仅安装 Sql Server 2017 Express LocalDB;
  • 停止实例:sqllocaldb stop MSSQLLocalDB
  • 删除实例:sqllocaldb delete MSSQLLocalDB
  • 创建新实例:sqllocaldb create MSSQLLocalDB
  • 启动实例:sqllocaldb start MSSQLLocalDB

一切正常。