ABP框架下Sqlite内存数据库类型转换异常求助
异常解决方法
问题根源
你在DbContext构造函数中强制将Database.GetDbConnection()返回的SqliteConnection转换为SqlConnection,但这两个是不同数据库提供商的连接类:
Microsoft.Data.Sqlite.SqliteConnection是Sqlite数据库的连接类型Microsoft.Data.SqlClient.SqlConnection是Sql Server(含Azure SQL)的连接类型
两者属于不同命名空间,无法强制转换,因此抛出InvalidCastException。
修复步骤
修改DbContext构造函数,先判断连接类型,仅在使用Sql Server连接时处理AccessToken逻辑,Sqlite场景直接跳过:
public LegalRegTechDbContext(DbContextOptions<LegalRegTechDbContext> options, IWebHostEnvironment env) : base(options) { // 先获取连接,不直接强制转换 var connection = Database.GetDbConnection(); if (env != null && connection is SqlConnection sqlConn) { var configuration = env.GetAppConfiguration(); if (configuration.GetValue<bool>("RequiresTokenAccess")) { sqlConn.AccessToken = new Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider() .GetAccessTokenAsync("https://database.windows.net/").Result; } } }
额外说明
- 内存Sqlite数据库不需要Azure SQL的AccessToken验证逻辑,所以在Sqlite场景下直接跳过这部分代码即可。
- 后续如果切换回Sql Server数据库,代码会自动识别
SqlConnection类型并执行AccessToken设置,不影响原有生产逻辑。
内容的提问来源于stack exchange,提问作者San Jaisy
相关产品推荐
相关产品推荐

