Я пытаюсь удалить все строки в таблице, используя Castle ActiveRecord. Обычно я бы сделал это:Есть ли быстрый способ удалить все строки в таблице с помощью Castle ActiveRecord или nHibernate?
DB.ParseError.DeleteAll();
Однако в этой таблице около 1,9 миллиона строк. То, что выше команда будет делать это выпустить отдельный SELECT
и DELETE
для каждой строки в таблице, глядя что-то вроде этого:
SELECT page0_.Id as Id29_0_, ... FROM Indexer.Pages page0_ WHERE page0_.Id=:p0;:p0 = b03665aa-37d0-4a2d-a04c-c232ebd94dbc [Type: Guid (0)]
SELECT page0_.Id as Id29_0_, ... FROM Indexer.Pages page0_ WHERE page0_.Id=:p0;:p0 = 11cb69e3-1c6a-4ac1-908b-084dfe859639 [Type: Guid (0)]
--- 1.9 million more of these
DELETE FROM Indexer.ParseErrors WHERE Id = :p0;:p0 = b03665aa-37d0-4a2d-a04c-c232ebd94dbc [Type: Guid (0)]
DELETE FROM Indexer.ParseErrors WHERE Id = :p0;:p0 = 11cb69e3-1c6a-4ac1-908b-084dfe859639 [Type: Guid (0)]
--- 1.9 million more of these
Это занимает ... ну я не знаю, как долго это берет, потому что я не У меня есть терпение, чтобы позволить ему закончить.
Что я хочу сделать, это выдать SQL-запрос; это одна:
DELETE FROM Indexer.ParseErrors;
Вот что я пытался до сих пор:
ISessionFactoryHolder holder = ActiveRecordMediator.GetSessionFactoryHolder();
ISession session = holder.CreateSession(typeof(DB.ParseError));
IDbCommand cmd = session.Connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "DELETE FROM Indexer.ParseErrors;";
cmd.CommandTimeout = 600;
cmd.ExecuteNonQuery();
holder.ReleaseSession(session);
Это, кажется, работает, однако, кажется, как взломать ко мне, как она полностью исключает модели и рамки ActiveRecord. Кроме того, это, вероятно, плохо работает с любым кэшированием NHibernate.
Есть ли еще официальный способ удалить таблицу, не делая 2 оператора SQL в строке?
Нет каскадных правил, поэтому это должно отлично работать! Спасибо.. –