如何解锁EntityFramework.core中的Sqlite数据库文件

5t7ly7z5  于 2023-05-29  发布在  SQLite
关注(0)|答案(1)|浏览(177)

我有一个在net6.0上使用Microsoft.EntityFrameworkCore.Sqlite6.0.5的项目。我希望在释放DbContext之后,Sqlite数据库文件将被解锁。
然而,我观察到的行为是,在DbContext被释放和完成之后,Sqlite数据库仍然处于锁定状态。有一个项目再现了here的行为。
如何解锁数据库文件?
我的DbContext看起来像这样:

public class MyContext : DbContext
{
    ~MyContext()
    {
        Console.WriteLine("Finaliser was called.");
    }

    public override void Dispose()
    {
        base.Dispose();
        Console.WriteLine("Dispose was called.");
    }

    public static readonly string DbFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "_temp.db");

    public DbSet<Foo> Summaries { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<Foo>().HasKey(nameof(Foo.Id));
    }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlite($"Data Source={DbFile}");
    }
}

我是这样使用它的:

public static void AddItem()
{
    using var ctx = new MyContext();
    ctx.Database.EnsureCreated();
    ctx.Summaries.Add(new Foo {Bar = "Foo"});
    ctx.SaveChanges();        
}
4bbkushb

4bbkushb1#

直接调用SqliteConnection.ClearAllPools()或在连接字符串(Pooling=false)中指定无池
https://learn.microsoft.com/en-us/dotnet/standard/data/sqlite/connection-strings#pooling

相关问题