升级ServiceStack OrmLite至8.5.2时,.NET Framework4.8 SQLite测试项目遇重复键异常
ServiceStack OrmLite升级至8.5.2后SQLite连接异常(.NET Framework 4.8)
升级ServiceStack OrmLite从v6.9.0到8.5.2版本后,在目标框架为.NET Framework 4.8的SQLite测试项目中触发System.ArgumentException异常,具体堆栈信息如下:
System.ArgumentException An entry with the same key already exists. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.SortedList`2.Add(TKey key, TValue value) at System.Data.SQLite.SQLiteConnection.ParseConnectionString(SQLiteConnection connection, String connectionString, Boolean allowNameOnly) at System.Data.SQLite.SQLiteConnection.HasInMemoryDataSource(SQLiteConnection connection, String connectionString, Boolean parseViaFramework) at System.Data.SQLite.SQLiteConnection..ctor(String connectionString, Boolean parseViaFramework) at ServiceStack.OrmLite.Sqlite.SqliteOrmLiteDialectProvider.CreateConnection(String connectionString) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.OrmLite/src/ServiceStack.OrmLite.Sqlite/SqliteOrmLiteDialectProvider.cs:line 19 at ServiceStack.OrmLite.Sqlite.SqliteOrmLiteDialectProviderBase.CreateConnection(String connectionString, Dictionary`2 options) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.OrmLite/src/ServiceStack.OrmLite.Sqlite/SqliteOrmLiteDialectProviderBase.cs:line 208 at ServiceStack.OrmLite.OrmLiteConnection.get_DbConnection() in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.OrmLite/src/ServiceStack.OrmLite/OrmLiteConnection.cs:line 40 at ServiceStack.OrmLite.OrmLiteConnection.Open() in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.OrmLite/src/ServiceStack.OrmLite/OrmLiteConnection.cs:line 119 at ServiceStack.OrmLite.OrmLiteConnectionFactory.OpenDbConnection(String namedConnection) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.OrmLite/src/ServiceStack.OrmLite/OrmLiteConnectionFactory.cs:line 195 at ChangeTracking.Test.HighJumpLocationOrderServiceTests..ctor() in D:\TFS\Integration\Change Tracking\Dev\ChangeTracking.Test\HighJumpLocationOrderServiceTests.cs:line 38
排查与解决建议
- 检查SQLite连接字符串,确认是否存在重复的配置项(比如重复指定
Data Source、Version等参数),重复键会导致SQLite解析连接字符串时抛出异常 - 验证
System.Data.SQLite版本兼容性:ServiceStack OrmLite 8.5.2可能依赖更高版本的SQLite驱动,若项目中引用的SQLite版本过低,可能出现解析逻辑冲突,尝试升级到OrmLite推荐的SQLite版本 - 查看OrmLite连接字符串处理逻辑变化:新版本OrmLite可能会自动注入某些默认参数,导致与自定义连接字符串中的配置重复,可尝试简化连接字符串,只保留必要参数
- 尝试启用连接字符串的框架解析模式:若OrmLite允许配置,可通过设置
parseViaFramework=true,让.NET框架处理连接字符串解析,绕过SQLite自身的SortedList解析逻辑
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

