Entity Framework Core - 错误:不支持关键字:“'server”。

10

我正在使用Entity Framework Core 2.1。我是通过数据库优先生成实体类来脚手架。当我尝试从其中一个数据库表中获取数据时,出现错误“不支持关键字'server'”。

我搜索了一下,看起来我的连接字符串不正确。这是在我的JSON文件中进行设置的。

"DefaultConnection": "\"Server=myDb.com;Database=MyDb;user id=admin;Password=Password;MultipleActiveResultSets=true;Provider=System.Data.SqlClient"

我见过其他类型的EF连接,例如:

connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=(local);initial catalog=test;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""

我不确定.csdl、ssdl和msl。

感谢任何帮助。谢谢。

错误:

System.ArgumentException:不支持的关键字:“'server”。

在 System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms, Boolean firstKey)
在 System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
在 System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
在 System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
在 System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) 在 System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) 在 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection() 在 Microsoft.EntityFrameworkCore.Internal.LazyRef`1.get_Value() 在 Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected) 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.BufferlessMoveNext(DbContext _, Boolean buffer) 在 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded) 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext() 在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider._TrackEntities[TOut,TIn](IEnumerable`1 results, QueryContext queryContext, IList`1 entityTrackingInfos, IList`1 entityAccessors)+MoveNext() 在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext() 异常引发位置: Microsoft.EntityFrameworkCore.dll 'dotnet.exe' (CoreCLR: clrhost): 已加载'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.2\System.IO.MemoryMappedFiles.dll'。已跳过符号加载。模块已经被优化,并且启用了调试器选项“只有我的代码”。

3个回答

3

简单地从连接字符串的开头和结尾移除\"即可解决问题。在这种情况下,您可以使用完整的连接字符串。

"DefaultConnection": "\"Server=tcp:myDb.com,1433;Initial Catalog=MyDb;Persist Security Info=False;User ID=admin;Password=Password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"\;"

to

"DefaultConnection": "Server=myDb.com,1433;Initial Catalog=MyDb;Persist Security Info=False;User ID=admin;Password=Password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

1

尝试了不同的连接字符串后,我在我的json文件中做了以下更改,使它能够正常工作。

"DefaultConnection": "Server=myDb.com;Database=MyDb;user id=admin;Password=Password;

我不清楚一个不完整的连接字符串如何解决你的问题。你展示的部分与上面相同。 - Gert Arnold
实际上有些不同,因为字符转义已被删除。在使用现有的dbContext和连接字符串添加标识后,我遇到了同样的问题。 - jamheadart

0

这是因为在脚手架标识后,连接字符串已被替换。替换的字符串可能看起来非常相似,但其中包含一些转义字符。

我有appSettings.Development.jsonappSettings.Staging.jsonappSettings.Production.json,每个文件都有不同的连接字符串。

在使用现有的dbContext脚手架标识后,它用一个单一的连接字符串替换了appSettings.json文件中的连接字符串。我不知道为什么它选择了那个连接字符串,但我意识到该字符串已被转义。

"Server=MYCOMPNAME\\SQLEXPRESS;...

已经成为

"\"Server=KRYTEN\\\\SQLEXPRESS;

这就是为什么我们会收到错误信息的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接