关于 sqlite-adonet
用于分析和测试 Microsoft.Data.Sqlite 在 ADO.NET 提供程序层行为的开发技能,重点关注命令与事务生命周期,而非 EF Core 抽象。
主要功能
- 01ADO.NET 命令生命周期指导
- 02关闭连接时清理 SQLite 语句
- 03可重试的 COMMIT 失败行为
- 04事务释放与回滚测试
适用场景
- 01调查连接重开后复用命令的情况
- 02分别测试 COMMIT 失败与释放错误
- 03诊断连接关闭和重开行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dotnet/ efcore --skill sqlite-adonet安装后在 Claude Code 中输入/sqlite-adonet确认已加载。
详细介绍
Microsoft.Data.Sqlite
位于 src/Microsoft.Data.Sqlite.Core/ 的独立 ADO.NET 提供程序,不依赖 EF Core。实现 System.Data.Common 抽象。
值得注意的实现细节
- 静态构造函数会反射调用
SQLitePCL.Batteries_V2.Init() CreateFunction()/CreateAggregate()重载由 T4 模板(.tt文件)生成
命令生命周期
SqliteConnection 通过弱引用跟踪关联的命令。关闭已打开的连接时,会先处置所有仍存活的已跟踪命令,再关闭原生连接;处置命令会释放已准备的语句并取消注册该命令。请根据此所有权关系和 System.Data.Common 合约,而不是 EF Core 提供程序抽象,来诊断关闭/重新打开问题报告。
关闭操作不会清除命令的托管配置或连接引用。如果在重新打开连接后再次使用同一个命令对象,执行时会针对新的句柄准备新的原生语句。只有在沿此生命周期排查后,所报告的行为仍然可能发生时,才添加回归测试。
事务完成
COMMIT 失败时,SQLite 事务可能仍处于活动状态并可重试。不要调用 Complete() 或添加事务级重试;SqliteCommand 已通过连接的 ExecuteNonQuery 路径重试 busy/locked 结果。
处置期间回滚时,即使回滚抛出异常,也必须分离托管事务,因此要将 Complete() 保留在 finally 中。分别测试提交失败与 Dispose()/DisposeAsync() 失败:保留原始异常,并验证处置后可以开始后续事务。
评论
支持 Markdown