NHibernate.ISession.Flush () занимает много времени после удаления () - операция - PullRequest
2 голосов
/ 15 сентября 2009

В моем приложении я хотел бы очистить / очистить таблицу (которая является единственной) в моей базе данных SQLite. Я программирую на C #. _session имеет тип NHibernate.ISession. Вот мой код:

string queryFmt = "FROM {0}"; string query = String.Format (queryFmt, typeName); _session.Delete (запрос);
_session.Flush ();

Мой пример базы данных состоит из более чем 5000 записей (размер файла s3db составляет около 750 КБ). Flush () - метод требует более 6 минут. (Когда я выполняю операцию удаления в администраторе SQLite, это занимает менее секунды.)

Как быстрее очистить стол?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2009

Использовать ExecuteUpdate для hql-запроса Вот пример:

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

    String hqlDelete = string.Format("delete {0} t",typename);
    int deletedEntities = session.CreateQuery( hqlDelete ).ExecuteUpdate();
    session.Close();
}
0 голосов
/ 15 сентября 2009

Если вы установите в конфиге nhib значение show_sql = true, какой sql выводится?


После вашего ответа вы можете видеть, что nhib занимает так много времени, потому что это не массовое удаление строк.

У Айенде есть пост, объясняющий это здесь.

...