Как удалить несколько объектов db с помощью Nhibernate?
Какова наилучшая практика для этой проблемы? Есть ли встроенные функции пакетной обработки?
Пример кода:
using (ITransaction transaction = _session.BeginTransaction())
{
_session.Delete("FROM myObject o WHERE o.Id = IN(1,2,...99999)");
transaction.Commit();
}
Спасибо заранее.
Ответы
Ответ 1
HQL поддерживает предложение IN, и если вы используете setParameterList, вы даже можете передать коллекцию.
var idList = new List<int>() { 5,3,6,7 };
_session.CreateQuery("DELETE MyDataClass o WHERE o.Id IN (:idList)")
.SetParameterList("idList", idList)
.ExecuteUpdate();
Ответ 2
У меня возникли проблемы с получением ответа на работу, и я нашел, что следующий запрос работал 100%
Session.CreateQuery("delete Customer c where c.id in (:deleteIds)")
.SetParameterList("deleteIds", deleteIds)
.ExecuteUpdate();
Клиент - это имя класса, а не имя таблицы.
id строчный, а в HQL это первичный ключ, а не имя свойства в классе (имена свойств поддерживаются)
Ответ 3
вы можете использовать HQL для удаления нескольких объектов
Посмотрите на удаление здесь - для примера session.delete
Пример HQL DELETE (вы можете использовать IN с HQL):
ISession session = sessionFactory.OpenSession();
ITransaction tx = session.BeginTransaction();
String hqlDelete = "delete Customer c where c.name = :oldName";
// or String hqlDelete = "delete Customer where name = :oldName";
int deletedEntities = session.CreateQuery( hqlDelete )
.SetString( "oldName", oldName )
.ExecuteUpdate();
tx.Commit();
session.Close();