Scaffold-DbContext"登录失败" "错误号码:4060,州:1,班级:11"

时间:2018-02-11 21:24:03

标签: sql-server asp.net-core asp.net-core-mvc entity-framework-core localdb

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

数据库优先开发需要对现有数据库进行逆向工程。 按照official documentation中的说明,我在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-NAME\UserName'.
   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-NAME\UserName'.

3 个答案:

答案 0 :(得分:2)

因为"登录失败"可能表示无法找到数据库,我决定在Visual Studio Server Explorer中复制粘贴连接字符串,右键单击数据库并选择" Properties"。

所以新命令是

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
  2. 而不是Data Source
  3. 我没有使用数据库名称,而是编写了LocalDb文件的完整路径

答案 1 :(得分:0)

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

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

用在Studio的服务器资源管理器中找到的值替换{MY-COMPUTER-NAME}和{DATABASE-NAME}。我在计算机上运行SQL Server(而非Express)。

答案 2 :(得分:0)

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

参考:Entity Framework Scaffold-DbContext Login failed for user