我正在使用Entity Framework Core 2.1。我首先将实体类又称为数据库。当我尝试从其中一个数据库表中获取数据时,出现错误“服务器不支持关键字”。
我用Google搜索,看来我的连接字符串不正确。这是在我的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:不支持的关键字:“服务器”。
at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary
2 parsetable, String connectionString, Boolean buildChain, Dictionary
2同义词,布尔值firstKey)
在System.Data.Common.DbConnectionOptions..ctor(字符串connectionString,字典2 synonyms)
1.get_Value() 在Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(布尔错误期望) 在Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection() at Microsoft.EntityFrameworkCore.Internal.LazyRef1.Enumerator.BufferlessMoveNext(DbContext _, Boolean buffer) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func
3操作中,函数3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
1.Enumerator.MoveNext() 在Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider._TrackEntities [TOut,TIn](IEnumerable1 results, QueryContext queryContext, IList
1EntityTrackingInfos,IList1 entityAccessors)+MoveNext() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor
1.EnumeratorExceptionInterceptor.MoveNext() 引发异常:Microsoft.EntityFrameworkCore.dll中的“ System.ArgumentException” 'dotnet.exe'(CoreCLR:clrhost):已加载'C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App \ 2.1.2 \ System.IO.MemoryMappedFiles.dll'。跳过的加载符号。模块已优化,调试器选项“ Just My Code”已启用。 程序“ [3112] dotnet.exe”已退出,代码为-1(0xffffffff)。
答案 0 :(得分:1)
可以简单地从连接字符串的开头和结尾删除\“。在这种情况下,您可以使用完整的连接字符串。
"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;"\;"
到
"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 :(得分:0)
这是因为在脚手架标识之后替换了连接字符串。替换字符串可能看起来非常相似,但是其中包含一些转义字符。
我有appSettings.Development.json
,appSettings.Staging.json
和appSettings.Production.json
,每个都有不同的连接字符串。
在使用EXISTING dbContext架设我的Identity之后,它已将appSettings.json文件中的连接字符串替换为一个连接字符串。我不知道为什么选择了那个,但是我意识到字符串被逃脱了
"Server=MYCOMPNAME\\SQLEXPRESS;...
已经成为
"\"Server=KRYTEN\\\\SQLEXPRESS;
这就是我们得到错误的原因。
答案 2 :(得分:-1)
在使用了不同的连接字符串后,这里我将json中的内容更改为文件以使其正常工作
"DefaultConnection": "Server=myDb.com;Database=MyDb;user id=admin;Password=Password;