在 F# 中释放 SQLite 资源

Releasing SQLite resources in F#

考虑以下 F# 脚本,它创建了一个简单的 SQLite 数据库和 table,然后应将其删除。然而,SQLite 对象似乎没有被正确处理,也没有释放它对文件的锁定。

#r @"C:\Path\To\System.Data.SQLite.dll"

open System.Data.SQLite

let createTable() = 
    use db = new SQLiteConnection(@"Data Source=test.sqlite")
    db.Open()
    let command = new SQLiteCommand("CREATE TABLE TestItems (ColA ColB)", db)
    command.ExecuteNonQuery() |> ignore
    db.Close()

createTable()

// System.IO.IOException: The process cannot access the file '[...]\test.sqlite' 
// because it is being used by another process.
System.IO.File.Delete("test.sqlite")

我的 F# 很差,但我对 use 的理解是对象的资源在超出范围时将被处理掉,但在本例中似乎并非如此。我试过打电话 Dispose() 也无济于事。

谁能阐明我如何在 F# 中正确处理 SQLite 对象?

SQLiteCommand 也需要处理,因为它还根据文档实现了 IDisposablehttps://www.devart.com/dotconnect/sqlite/docs/Devart.Data.SQLite~Devart.Data.SQLite.SQLiteCommand_members.html (via System.ComponentModel.Component

command 使用 use 绑定而不是 let 应该可以解决问题。