.NET Core中Connection string关键字'server'不支持问题求助
问题:EF Core使用Sqlite时出现Connection String 'server'关键字不支持错误
我们大学课程的项目之前多次构建都没问题,但最近修改后出现了如下错误:
Microsoft.EntityFrameworkCore.Query[10100] An exception occurred while iterating over the results of a query for context type 'AdministrationAPI.Data.AppDbContext'. System.ArgumentException: Connection string keyword 'server' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181. at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder.GetIndex(String keyword) at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder.set_Item(String keyword, Object value) at System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value) at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder..ctor(String connectionString) at Microsoft.Data.Sqlite.SqliteConnectionFactory.GetPoolGroup(String connectionString) at Microsoft.Data.Sqlite.SqliteConnection.set_ConnectionString(String value) at Microsoft.Data.Sqlite.SqliteConnection..ctor(String connectionString) at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.CreateDbConnection() at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection() at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.MoveNextAsync() System.ArgumentException: Connection string keyword 'server' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181. at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder.GetIndex(String keyword) at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder.set_Item(String keyword, Object value) at System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value) at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder..ctor(String connectionString) at Microsoft.Data.Sqlite.SqliteConnectionFactory.GetPoolGroup(String connectionString) at Microsoft.Data.Sqlite.SqliteConnection.set_ConnectionString(String value) at Microsoft.Data.Sqlite.SqliteConnection..ctor(String connectionString) at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.CreateDbConnection() at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection() at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.MoveNextAsync() Unhandled exception. System.ArgumentException: Connection string keyword 'server' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181. at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder.GetIndex(String keyword) at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder.set_Item(String keyword, Object value) at System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value) at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder..ctor(String connectionString) at Microsoft.Data.Sqlite.SqliteConnectionFactory.GetPoolGroup(String connectionString) at Microsoft.Data.Sqlite.SqliteConnection.set_ConnectionString(String value) at Microsoft.Data.Sqlite.SqliteConnection..ctor(String connectionString) at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.CreateDbConnection() at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection() at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.MoveNextAsync() at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken) at Microsoft.AspNetCore.Identity.RoleManager`1.RoleExistsAsync(String roleName) at Program.<Main>$(String[] args) in C:\Users\xxx\Documents\GitHub\xxx\xxx\Program.cs:line 102 at Program.<Main>(String[] args) PS C:\Users\xxx\Documents\GitHub\xxx\xxx>
项目的连接字符串配置如下:
"ConnectionStrings": { "DefaultConnectionString": "server=localhost;User Id=root;password=password;database=ourproject;", "DefaultConnectionString_Select": "server=localhost;User Id=root;password=password;database=ourproject_application;", "SqliteMain": "Data Source=main.db", "SqliteProvider": "Data Source=provider.db", "OurprojectDB": "Data Source=SQL8005.site4now.net;Initial Catalog=db_a96e9a_ourproject001;User Id=db_a96e9a_ourproject001_admin;Password=mihighschool" }
问题原因与解决方法
核心问题:你的
AppDbContext当前被配置为使用Sqlite数据库驱动,但传入的却是适用于MySQL/SQL Server的连接字符串(包含server关键字)。Sqlite是文件型数据库,它的连接字符串不需要server这类指向远程服务器的配置,只认Data Source这类指定本地数据库文件的关键字,所以会抛出这个错误。排查与修复方向:
- 检查数据库驱动配置:打开
Program.cs(错误提示里的文件),找到AppDbContext的服务注册代码,看看是不是不小心把原本的UseMySql/UseSqlServer改成了UseSqlite。如果是,改回对应数据库的驱动即可。
示例(MySQL配置):builder.Services.AddDbContext<AppDbContext>(options => options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnectionString"), new MySqlServerVersion(new Version(8, 0, 28)))); - 检查连接字符串指向:如果确实要使用Sqlite,那要确保
AppDbContext使用的是SqliteMain或SqliteProvider这两个Sqlite专用的连接字符串,而不是DefaultConnectionString这类带server的。
示例(Sqlite配置):builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlite(builder.Configuration.GetConnectionString("SqliteMain")));
- 检查数据库驱动配置:打开
内容的提问来源于stack exchange,提问作者l0ner9
相关产品推荐
相关产品推荐

