通过 cli 连接字符串进行数据库更新

问题描述 投票:0回答:1

对于一个新项目,我正在学习多租户,其中每个租户都有自己的数据库。

这个想法是通过使用 finbuckle nuget 包,它从

appsettings.development.json
获取连接字符串。

但是为了创建迁移和更新数据库,必须将连接字符串作为参数传递。

我的数据库是通过 docker 使用以下命令:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=myPassword" -p 1433:1433 --name sqlTest--hostname sqlTest -d mcr.microsoft.com/mssql/server:2022-latest

并使用azure data studio,我成功连接到数据库。

每当我想使用命令时

dotnet ef database update -- --connection-string "Server=localhost,1433; Database=test; User Id=SA; Password=myPassword"

我收到错误:

System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
   at Microsoft.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
   at Microsoft.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms, Boolean firstKey)
   at Microsoft.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
   at Microsoft.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
   at Microsoft.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
   at Microsoft.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
   at Microsoft.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
   at Microsoft.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
   at Microsoft.Data.SqlClient.SqlConnection..ctor(String connectionString)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection()
   at Microsoft.EntityFrameworkCore.Diagnostics.RelationalLoggerExtensions.MigrateUsingConnection(IDiagnosticsLogger`1 diagnostics, IMigrator migrator, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Format of the initialization string does not conform to specification starting at index 0.

我已经尝试了多种连接字符串格式,例如使用 IP 而不是 localhost 并将端口添加到服务器名称中。但我总是遇到同样的错误,而且我不知道从这里该去哪里。

c# sql-server docker entity-framework connection-string
1个回答
0
投票

我已经使用过你的命令,我假设你和我一样使用 Windows 操作系统。我在你的尝试中发现了一些东西,这是我的答案。

  1. 在您的连接字符串中,因为answer提到您需要使用
    127.0.0.1\sqlTest
    作为服务器名称。
  2. 在您的 dotnet 命令中,您使用的是
    -- --connection-string
    ,我认为这是一个拼写错误或不正确的内容,请检查此答案用于 EF 核心数据库更新的命令行连接字符串
  3. 最后我遇到了一个问题:与服务器成功建立了连接,但在登录过程中出现了错误。 (错误号:233) 并通过在连接字符串中添加
    TrustServerCertificate=True
    来解决该问题。

以下是我为使其正常工作而执行的所有步骤(我的 EF 项目名为 WebApplication1):

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Qwer!234" -p 1433:1433 --name sqlTest --hostname sqlTest -d mcr.microsoft.com/mssql/server:2022-latest

dotnet ef migrations add InitialCreate --project .\WebApplication1.csproj

dotnet ef database update --connection "Server=127.0.0.1\sqlTest,1433; User Id=sa; Password=Qwer!234; Database=test; TrustServerCertificate=True"

这是结果截图:

和 Azure Data Studio:

© www.soinside.com 2019 - 2024. All rights reserved.