Scaffold-DbContext "Login Failed" "Error Number:4060,State:1,Class:11"



我的ASP.NET MVC Core应用程序应通过Entity Framework连接到现有的MSSQL LocalDB文件。

数据库优先开发需要对现有数据库进行反向工程。按照官方文档中的说明,我在Nuget软件包管理器控制台中运行以下命令:

Scaffold-DbContext "Server=(localdb)mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

但是我得到了

No design-time services were found.
System.Data.SqlClient.SqlException (0x80131904): Cannot open database "DatabaseName" requested by the login. The login failed.
Login failed for user 'MACHINE-NAMEUserName'.
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
Error Number:4060,State:1,Class:11
Cannot open database "DatabaseName" requested by the login. The login failed.
Login failed for user 'MACHINE-NAMEUserName'.

由于"登录失败"可能表明数据库无法找到,因此我决定在Visual Studio Server Explorer中复制连接字符串,通过右键单击数据库并选择"属性"。

所以新命令是

Scaffold-DbContext "Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=C:Users...AbsolutePath...DatabaseFileName.mdf;Integrated Security=True;Connect Timeout=30" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -verbose

和...它起作用。所以:

  1. 而不是Server,我使用Data Source
  2. 我不使用数据库名称,而是写了LocalDB文件的完整路径

对我有用的是指定命令如下:

Scaffold-DbContext "Data Source={MY-COMPUTER-NAME};Initial Catalog={DATABASE-NAME};Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

替换{my-computer-name}和{database-name},并在Studio的Server Explorer中找到值。我正在计算机上运行SQL Server(不是Express(。

根据其他线程,您的密码可能包含特殊字符,例如$,

参考:实体框架脚手架dbContext登录失败的用户

最新更新