实体框架核心-错误:不支持关键字:““服务器”

时间:2018-09-04 19:33:25

标签: sql-server entity-framework .net-core

我正在使用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)
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.LazyRef
1.get_Value()      在Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(布尔错误期望)      在Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable 1.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](IEnumerable 1 results, QueryContext queryContext, IList 1EntityTrackingInfos,IList 1 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)。

3 个答案:

答案 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.jsonappSettings.Staging.jsonappSettings.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;