FreeSql
FreeSql copied to clipboard
如何手工关闭数据库连接?
Test项目中,操作了一个sqlite文件后,想在代码中直接删除,但报文件被占用,删除失败。使用fsql.Dispose()无效。请问如何手工关闭数据库连接?
SqliteConnection.ClearAllPools();
测试了下不行,文件还是无法删除
能不能通过fsql对象拿到原始的SqliteConnection对象?
拿到之后要怎么操作?我忘了之前有人操作过你的问题。
拿到之后手工Close,之前用Dapper的时候这么弄没有问题,文件可以删除
你先测一下原生 ado.net 怎么释放
这个测试过,就是Close方法
我刚回退到之前的Dapper代码,测试了也不行。一度怀疑之前记错了。经过一番验证,目前结论如下: 核心原因是和Sqlite驱动有关,FreeSql.Provider.SqliteCore死活不行,而FreeSql.Provider.Sqlite是可以的。所以本质还是Microsoft.Data.Sqlite和System.Data.Sqlite驱动的区别,前面回退到Dapper不行,是因为中间变过驱动。
经验证,FreeSql通过下面方式创建连接: SQLiteConnection conn = new SQLiteConnection("Data Source=XXX.db"); IFreeSql fsql = new FreeSql.FreeSqlBuilder().UseConnectionFactory(FreeSql.DataType.Sqlite, () => conn).Build();
然后在执行完相关数据库操作后: conn.Close()
sqlite文件可以正常删除,前提是使用FreeSql.Provider.Sqlite驱动,用FreeSql.Provider.SqliteCore则不行
FreeSql.Provider.Sqlite 3.2.807-preview20231219
用这个版本试试
FreeSql.Provider.Sqlite本来就可以的吧