EF core 7 发布数据库.sqlite问题

问题描述 投票:0回答:1

我正在使用(从 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吗?您有什么想法或设置可以解决我的问题吗?提前致谢。

c# entity-framework entity-framework-core
1个回答
0
投票

此问题与 efcore 6 引入的重大更改相关(有关更多信息,请参阅此链接:https://github.com/dotnet/efcore/issues/26580)。 SQLite 现在对连接进行池化,因此当连接“关闭”时,它仍可用于其他用途。可以使用连接字符串中的

Pooling=false
选项更改此行为。这将恢复之前的行为,并在 DbContext 被销毁时关闭连接。

© www.soinside.com 2019 - 2024. All rights reserved.