You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:55:27