Ошибка Entity Framework Scaffold-DbContext для пользователя

Я пытаюсь создать API с помощью Visual Studio 2017 и.NET Core 2 с ядром Entity Framework Core. Я следую указаниям этой ссылки. Я нахожусь в разделе под названием: Обратный инженер вашей модели

Команда, которую они запускают, следующая:

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

Моя база данных - это база данных Azure SQL, поэтому я пытаюсь запустить эту команду, используя строку подключения, предоставленную на портале Azure:

Scaffold-DbContext "Server=tcp:dbname.database.windows.net,1433;Initial Catalog=DBNAME_DB;Persist Security Info=False;User ID=username;Password=password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Я возвращаюсь

System.Data.SqlClient.SqlException (0x80131904): Login failed for user 'username'.
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource'1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource'1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource'1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource'1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource'1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.SqlServerDatabaseModelFactory.Create(DbConnection connection, IEnumerable'1 tables, IEnumerable'1 schemas)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.SqlServerDatabaseModelFactory.Create(String connectionString, IEnumerable'1 tables, IEnumerable'1 schemas)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.Create(String connectionString, IEnumerable'1 tables, IEnumerable'1 schemas, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.ModelScaffolder.Generate(String connectionString, IEnumerable'1 tables, IEnumerable'1 schemas, String projectPath, String outputPath, String rootNamespace, String contextName, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(String provider, String connectionString, String outputDir, String dbContextClassName, IEnumerable'1 schemas, IEnumerable'1 tables, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(String provider, String connectionString, String outputDir, String dbContextClassName, IEnumerable'1 schemaFilters, IEnumerable'1 tableFilters, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.<>c__DisplayClass0_1.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0'1.<Execute>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
ClientConnectionId:ba6ca255-04c8-46c2-9d4f-77204728e9f2
Error Number:18456,State:1,Class:14
Login failed for user 'username'.

С этой же машины и имени пользователя и пароля я могу войти в базу данных с помощью SSMS. У кого-нибудь есть предложения, почему я не могу запустить эту команду из Visual Studio?

Ответы

Ответ 1

Я понял свою проблему. Мой пароль содержал символ $, и это нужно избегать, используя 'до $.

Ответ 2

Вы пытались обновить файл web.config для строки подключения. Это может быть причиной, которая не позволяет вам войти в лазурь.

Ответ 3

Убедитесь, что логин пользователя существует в целевой базе данных SQL Azure, а не только на сервере базы данных Azure SQL.

- В основной базе данных CREATE LOGIN MaryLogin WITH PASSWORD = '';

- В базе данных пользователей

СОЗДАТЬ ПОЛЬЗОВАТЕЛЬ MaryUser FROM LOGIN MaryLogin;

Создайте правило брандмауэра на портале Azure, чтобы разрешить доступ к базе данных Azure SQL, как описано здесь. Убедитесь, что порт TCP 1433 открыт с вашего компьютера.

Ответ 4

Я получил ту же ошибку. Я использовал этот формат Scaffold, и он работал на меня.

Scaffold-DbContext "Сервер = xx.xxx.xx.xx; База данных = xx; Идентификатор пользователя = xxx; Пароль = xxxx; Trusted_Connection = True; MultipleActiveResultSets = true; Интегрированная безопасность = false" Модели Microsoft.EntityFrameworkCore.SqlServer -OutputDir -OutputDir CN01] "BTDBContext" -DataAnnotations -force