Come eliminare più entità db con Nhibernate?

Come eliminare più entità db con Nhibernate?

HQL supporta la clausola IN e se usi setParameterList puoi persino passare una raccolta.

var idList = new List<int>() { 5,3,6,7 };

_session.CreateQuery("DELETE MyDataClass o WHERE o.Id IN (:idList)")
    .SetParameterList("idList", idList)
    .ExecuteUpdate();

Tieni presente, come menzionato da ddango in un commento, che le relazioni a cascata specificate nei tuoi oggetti non verranno eseguite poiché l'esecuzione di una query HQL si traduce semplicemente in una query DB e in realtà non carica alcun oggetto entità.


Ho avuto problemi a far funzionare la risposta e ho riscontrato che la seguente query ha funzionato al 100%

        Session.CreateQuery("delete Customer c where c.id in (:deleteIds)")
            .SetParameterList("deleteIds", deleteIds)
            .ExecuteUpdate();

Customer è il nome della classe non il nome della tabella.id è minuscolo e in HQL è la chiave primaria non un nome della proprietà nella classe (i nomi delle proprietà sono supportati)


puoi utilizzare HQL per eliminare più oggetti

Cerca elimina qui - per l'esempio session.delete

Esempio HQL DELETE (puoi usare IN con 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();