我的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'.
答案 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
并且...它有效。 所以:
Server
Data Source
答案 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