Domanda

Nella mia applicazione l'utente può cercare-condizioni definisce. Si può scegliere una colonna, impostare un operatore (pari, come, maggiore, minore o uguale, ecc) e dare il valore. Dopo l'utente fa clic su un pulsante e l'applicazione dovrebbe fare una ricerca sul database con la condizione. Io uso NHibernate e mi chiedo ora, qual è il modo efficientest per fare questo con NHibernate.

Devo creare una query con esso come (Colonna = Nome, Operatore = Come, Valore =% John%)

        var a = session.CreateCriteria<Customer>();
        a.Add(Restrictions.Like("Name", "%John%"));
        return a.List<Customer>();

O devo farlo con HQL:

        var q = session.CreateQuery("from Customer where " + where);
        return q.List<Customer >();

O c'è una soluzione più bether?

Grazie per il vostro aiuto.

Con i migliori saluti, Thomas

È stato utile?

Soluzione

È possibile utilizzare uno dei due. Ci potrebbe essere certo un differenze tra i due. Ma qualunque cosa tu faccia assicurarsi che i nomi di colonna sono costanti o sono mappati al nome della colonna, altrimenti il ??tuo repository sarà strettamente accoppiato al vostro modello di definizione vale a dire se si aggiorna il columnname si dovrà andare e aggiornare tali dichiarazioni da soli.

E quando si sta costruendo la clausola WHERE fa ure si dispone di una funzione che aggiunge la query giusta. si sarà probabilmente avendo un'istruzione case interruttore per lo stesso.

Altri suggerimenti

In termini di efficence non c'è differenza. Nella versione HQL io preferirei usare un parametro invece di aggiungere la cui parte sotto forma di stringa. Se si utilizza NH3.0 si può considerare l'utilizzo di QueryOver troppo, per evitare l'uso di stringhe per descrivere le proprietà

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top