如何释放数据库文件? (NHibernate 和嵌入式 Firebird 数据库)
How to release database file? (NHibernate and embedded Firebird database)
我们正在使用 Nhibernate 连接到本地 firebird 数据库文件。我们目前加载它是嵌入的,但在某些情况下需要释放它,以便可以移动或删除磁盘上的文件。简单地关闭和处理 nhibernate 中的 sessionfactory 是行不通的。该文件仍在使用中。
using (ISessionFactory sessionFactory = configuration.BuildSessionFactory())
{
using (ISession session = sessionFactory.OpenSession())
{
using (System.Data.IDbCommand command = session.Connection.CreateCommand())
{
// commands removed
}
}
sessionFactory.Close();
}
// file is still "in use" here
这是否可行,或者我们是否需要启动一个单独的流程?
无需禁用池化。我在我的很多项目中都使用 NHibernate + FB Embedded。在代码中的适当位置尝试 FbConnection.ClearAllPools() (在您的情况下,似乎是在您使用完会话工厂之后)。您需要在项目中添加对 FB 提供程序程序集的引用。
我们正在使用 Nhibernate 连接到本地 firebird 数据库文件。我们目前加载它是嵌入的,但在某些情况下需要释放它,以便可以移动或删除磁盘上的文件。简单地关闭和处理 nhibernate 中的 sessionfactory 是行不通的。该文件仍在使用中。
using (ISessionFactory sessionFactory = configuration.BuildSessionFactory())
{
using (ISession session = sessionFactory.OpenSession())
{
using (System.Data.IDbCommand command = session.Connection.CreateCommand())
{
// commands removed
}
}
sessionFactory.Close();
}
// file is still "in use" here
这是否可行,或者我们是否需要启动一个单独的流程?
无需禁用池化。我在我的很多项目中都使用 NHibernate + FB Embedded。在代码中的适当位置尝试 FbConnection.ClearAllPools() (在您的情况下,似乎是在您使用完会话工厂之后)。您需要在项目中添加对 FB 提供程序程序集的引用。