2009-09-15 46 views
2

在我的应用程序中,我希望清除/清空SQLite-DB中的表(这是唯一一个表)。 我使用C#编程。 _session是NHibernate.ISession类型。这里是我的代码:NHibernate.ISession.Flush()在删除()后需要很长时间 - 操作

string queryFmt =“FROM {0}”; string query = String.Format(queryFmt,typeName); _session.Delete(query);
_session.Flush();

我的示例-DB由超过5000个条目组成(s3db文件大约750KB)。 Flush() - 方法需要6分钟以上。 (当我在SQLite管理员中执行删除操作时,需要不到一秒的时间。)

如何更快地清空表格?

回答

2

在HQL查询 这里使用一个executeUpdate的是一个例子:

using(var session = sessionFactory.OpenSession()) 
{ 

    String hqlDelete = string.Format("delete {0} t",typename); 
    int deletedEntities = session.CreateQuery(hqlDelete).ExecuteUpdate(); 
    session.Close(); 
} 
+0

一个微小的变化:它是“session.CreateQuery ...”,而不是“hqlDelete.CreateQuery ...” – toni

+0

这是正确的我编辑。谢谢 :) – Beatles1692

0

如果设置nhib在配置到show_sql =真,哪些SQL是输出?


你的回应后,你可以看到nhib是这么长时间,因为它不是批量删除行。

Ayende有一个文章,解释它here.

+0

为_session.Delete(...):NHibernate的:选择logentry0_.Id为Id22_,logentry0_.Message作为Message22_,logentry0_.Type作为Type22_,logentry0_.Category作为Category22_,logentry0_.DateCaleated作为DateCrea5_22_,logentry0_.Level作为Level22_从Log logentry0_ ============ for _session .Flush():NHibernate的:DELETE FROM登录其中id = @ P0; P0 @ = 1 NHibernate的: DELETE FROM登录其中id = @ P0; P0 @ = 2 ...的NHibernate:DELETE FROM登录其中id = @ P0; P0 @ = 99的NHibernate:DELETE FROM登录其中id = @ P0; P0 @ = 100 – toni