2010-05-01 4 views
3

Думаю, я знаю, каков может быть ответ на этот вопрос, но я подумал, что все равно попробую.Удаление коллекции с помощью NHibernate с использованием API критериев

Оказывается, что в NHibernate, если я что-то вроде этого:

IList<Customer> customers = Session.CreateCriteria(typeof(Customer)) 
           .Add(Restrictions.Eq("Name", "Steve") 
           .List<Customer>(); 

И я хочу, чтобы затем удалить этот список клиентов. Из того, что я могу сказать, что единственный способ сделать это так:

foreach(var customer in customers) 
{ 
    Session.Delete(customer); 
} 

Но что мне интересно, есть ли способ я могу просто пойти:

Session.Delete(customers); 

И удалить всю коллекцию с одним звонком?

ответ

5

Не с Критериями, но это легко сделать с помощью HQL:

session.CreateQuery("delete Customer customer where customer in (:customers)") 
     .SetParameterList("customers", customers.ToArray()) 
     .ExecuteUpdate(); 

Но вам не нужно загружать их. Вы также можете сделать это одним выстрелом:

session.CreateQuery("delete Customer where Name = 'Steve'") 
     .ExecuteUpdate();