Производя программное обеспечение для клиентов, в основном использующих MS SQL, но некоторые Oracle, было принято решение погрузиться в Nhibernate (и C #).
Задача состоит в том, чтобы эффективно удалить, например, 10 000 строк из 100 000, и при этом оставаться привязанными к ORM.
Я пробовал именованных запросов - ссылка уже,
IQuery sql = s.GetNamedQuery ("native-delete-car"). SetString (0, "Kirsten");
sql.ExecuteUpdate ();
но лучшее, что я когда-либо нашел, кажется:
using (ITransaction tx = _session.BeginTransaction())
{
try
{
string cmd = "delete from Customer where Id < GetSomeId()";
var count = _session.CreateSQLQuery(cmd).ExecuteUpdate();
...
Поскольку он может не попасть в дБ, чтобы получить все полные строки перед их удалением.
Мои вопросы:
Если есть лучший способ удаления этого типа.
Если есть возможность получить условие Где для удаления, например:
Наличие оператора select (с использованием LinQ для NHibernate) =>который сгенерирует соответствующий SQL для DB =>, мы получим условие Where и используем его для Delete.