我正在使用(从 EF 移植到 EF Core)Entity Framework Core 7,但我有一个问题,我看到当 datacontext 退出使用范围时,Entity Framework Core 7 不会释放数据库 file.sqlite。只有当我关闭主程序时,文件才会被释放。 下面是我的代码:
using (var ctx = new DataAccessContextTool())
{
ctx.MigrateAndSetAutodetectChanges();
ctx.ToolData.ClearDbSet();
//ctx.SaveChanges();
int key = 0;
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
var tmp = objetToSave
.Tool
.Elements
.Select(ele =>
new DbTool {
Key = key++,
ProjectNum = ele.ProjectNum,
DataType = (int)ele.DataType, DataJson = JsonConvert.SerializeObject(ele, settings)
}).ToList();
ctx.ToolData.AddRange(tmp);
ctx.SaveChanges();
//ctx.Database.ExecuteSqlCommand("PRAGMA user_version = 2");
}
对于最后调用此调用的“旧”EF,它会关闭数据库,但 EF Core 不起作用
GC.Collect();
GC.WaitForPendingFinalizers();
有办法用EFCore释放DB吗?您有什么想法或设置可以解决我的问题吗?提前致谢。
此问题与 efcore 6 引入的重大更改相关(有关更多信息,请参阅此链接:https://github.com/dotnet/efcore/issues/26580)。 SQLite 现在对连接进行池化,因此当连接“关闭”时,它仍可用于其他用途。可以使用连接字符串中的
Pooling=false
选项更改此行为。这将恢复之前的行为,并在 DbContext 被销毁时关闭连接。