ASP.NET Core 6 MVC升级EF Core 7后无法连接SQLite求助
问题背景
为使用context.Database.SqlQuery<T>()功能,将ASP.NET Core 6 MVC项目从EF 6升级至EF Core 7,但执行EF查询或迁移命令时完全无法连接SQLite。
执行命令
C:\Path\To\My\Project\Ui>dotnet ef database update --context sqliteascertodbcontext Build started... Build succeeded. Debug: Registered integration with EF Core.
错误信息
使用服务器'C:\Path\To\My\Project\Ui\db.sqlite3'上的'main'数据库连接时出错。
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: ''。at Microsoft.Data.Sqlite.SqliteConnection.LoadExtensionCore(String file, String proc)
at Microsoft.Data.Sqlite.SqliteConnection.Open()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteScalar(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
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)
SQLite Error 1: ''。
项目包引用
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="6.0.11" /> <PackageReference Include="Microsoft.Data.Sqlite.Core" Version="7.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="7.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyModel" Version="7.0.0" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.5" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.0"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.0" /> <PackageReference Include="Microsoft.Owin" Version="4.2.0" /> <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.17.0" /> <PackageReference Include="Microsoft.Owin.Security" Version="4.2.0" /> <PackageReference Include="Microsoft.Owin.Security.OAuth" Version="4.2.0" /> <PackageReference Include="Microsoft.Owin.Security.Jwt" Version="4.2.0" /> <PackageReference Include="Microsoft.Identity.Web" Version="1.23.1" /> <PackageReference Include="Sentry.AspNetCore" Version="3.22.0" /> <PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.6.2" /> <PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.3" /> <PackageReference Include="VueCliMiddleware" Version="3.1.2" /> </ItemGroup>
问题排查与解决方案
1. 修复版本不一致问题
项目中Microsoft.EntityFrameworkCore.SqlServer版本为6.0.0,与其他EF Core 7.0.0版本包存在兼容性冲突,将其升级至7.0.0:
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.0" />
2. 清理冗余依赖并匹配SQLite版本
Microsoft.EntityFrameworkCore.Sqlite已包含Microsoft.Data.Sqlite.Core和Microsoft.EntityFrameworkCore.Sqlite.Core的依赖,可移除这两个冗余引用。SQLitePCLRaw.bundle_e_sqlite3版本2.1.3与EF Core 7.0.0不兼容,升级至2.1.4或更高版本:
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.4" />
3. 检查连接字符串配置
确保sqliteascertodbcontext对应的连接字符串格式正确,SQLite连接字符串示例:
"ConnectionStrings": { "sqliteascertodbcontext": "Data Source=C:\\Path\\To\\My\\Project\\Ui\\db.sqlite3" }
也可使用相对路径简化配置:Data Source=./db.sqlite3,同时确认路径无权限或转义错误。
4. 验证文件与目录权限
- 确认
db.sqlite3所在目录具备读写权限,尤其是运行dotnet ef命令的用户账户。 - 若文件不存在,EF Core迁移会自动创建,但需确保目录可写入。
5. 处理不兼容的代码生成包
Microsoft.VisualStudio.Web.CodeGeneration.Design版本3.1.5与ASP.NET Core 6不匹配,可升级至6.0.x版本,或根据需求移除该包。
内容的提问来源于stack exchange,提问作者Ben

