mcpField
S
sqlite-adonet

sqlite-adonet

github.com/dotnet开发14.8k48 次安装今天更新
代码仓库

关于 sqlite-adonet

用于分析和测试 Microsoft.Data.Sqlite 在 ADO.NET 提供程序层行为的开发技能,重点关注命令与事务生命周期,而非 EF Core 抽象。

主要功能

  1. 01ADO.NET 命令生命周期指导
  2. 02关闭连接时清理 SQLite 语句
  3. 03可重试的 COMMIT 失败行为
  4. 04事务释放与回滚测试

适用场景

  1. 01调查连接重开后复用命令的情况
  2. 02分别测试 COMMIT 失败与释放错误
  3. 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