ASP.NET核心:尝试为文件附加自动命名的数据库失败
ASP.NET Core: An attempt to attach an auto-named database for file failed
我知道这个问题已经被问过很多次了,但我仍然找不到与我的情况类似的问题。
我正在处理 ASP.NET 核心 WebAPI 项目。
一切都很好,如果我把它搞砸了,我真的无法重现。
应该使用从 appsettings.Development.json 文件中检索到的连接字符串进行调试:
"DefaultConnection":
"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|MyProj.mdf"
调用 context.Database.CreateIfNotExists();
时,出现以下错误:
System.Data.SqlClient.SqlException 发生(HResult 0x80131904):
An attempt to attach an auto-named database for file C:\Users\Shimmy\Documents\Visual Studio 2017\Projects\MyProj\MyProj.Api\AppData\MyProj.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
Source: .Net SqlClient Data Provider
StackTrace:
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
我是 运行 作为 Kestrel 控制台应用程序的 WebAPI。
这是我尝试过的方法:
- 将
Integrated Security=True
或MultipleActiveResultSets=True
添加到连接字符串
- 添加了连接字符串的完整路径
- 删除并重新创建 MSSQLLocalDB 实例
- 正在重新安装 SQL LocalDB
将 AttachDbFilename
标志替换为 Initial Catalog=MyProj
,引发此错误:
System.Data.SqlClient.SqlException occurred
HResult: 0x80131904
Message: Cannot open database "MyProj" requested by the login. The login failed.
Login failed for user 'SHIMMY-PC\Shimmy'.
Source: .Net SqlClient Data Provider
StackTrace:
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
但是 SHIMMY-PC\Shimmy 确实出现在实例的用户中:
只有预先创建数据库文件,我才能让它工作,这不是我真正想要的,但我不会为此争吵。
顺便说一句,我找到了一个方便的方法 drop/create 数据库,不会造成太多麻烦。
我打开开发人员 CLI 并导航到 project/solution 文件夹,然后调用 dotnet ef database
,首先是 drop
,然后是 update
。
在.net core环境下,绕过auto-naming
部分应该可以修复。只需添加:
Initial Catalog=MyNotAutoNamedDb;
连接字符串中的某处,它应该可以工作。
[注意:不要替换AttachDbFilename
!]
我知道这个问题已经被问过很多次了,但我仍然找不到与我的情况类似的问题。
我正在处理 ASP.NET 核心 WebAPI 项目。 一切都很好,如果我把它搞砸了,我真的无法重现。
应该使用从 appsettings.Development.json 文件中检索到的连接字符串进行调试:
"DefaultConnection":
"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|MyProj.mdf"
调用 context.Database.CreateIfNotExists();
时,出现以下错误:
System.Data.SqlClient.SqlException 发生(HResult 0x80131904):
An attempt to attach an auto-named database for file C:\Users\Shimmy\Documents\Visual Studio 2017\Projects\MyProj\MyProj.Api\AppData\MyProj.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
Source: .Net SqlClient Data Provider
StackTrace: at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
我是 运行 作为 Kestrel 控制台应用程序的 WebAPI。
这是我尝试过的方法:
- 将
Integrated Security=True
或MultipleActiveResultSets=True
添加到连接字符串 - 添加了连接字符串的完整路径
- 删除并重新创建 MSSQLLocalDB 实例
- 正在重新安装 SQL LocalDB
将 AttachDbFilename
标志替换为 Initial Catalog=MyProj
,引发此错误:
System.Data.SqlClient.SqlException occurred
HResult: 0x80131904
Message: Cannot open database "MyProj" requested by the login. The login failed. Login failed for user 'SHIMMY-PC\Shimmy'.
Source: .Net SqlClient Data Provider
StackTrace: at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
但是 SHIMMY-PC\Shimmy 确实出现在实例的用户中:
只有预先创建数据库文件,我才能让它工作,这不是我真正想要的,但我不会为此争吵。
顺便说一句,我找到了一个方便的方法 drop/create 数据库,不会造成太多麻烦。
我打开开发人员 CLI 并导航到 project/solution 文件夹,然后调用 dotnet ef database
,首先是 drop
,然后是 update
。
在.net core环境下,绕过auto-naming
部分应该可以修复。只需添加:
Initial Catalog=MyNotAutoNamedDb;
连接字符串中的某处,它应该可以工作。
[注意:不要替换AttachDbFilename
!]