我有一个在net6.0
上使用Microsoft.EntityFrameworkCore.Sqlite
6.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();
}
1条答案
按热度按时间4bbkushb1#
直接调用SqliteConnection.ClearAllPools()或在连接字符串(
Pooling=false
)中指定无池https://learn.microsoft.com/en-us/dotnet/standard/data/sqlite/connection-strings#pooling