I miei problemi personali "spiegati frequentemente":
Anti-pattern
Giocare con oggetti distaccati (SaveOrUpdate o Merge più un po 'di codice disordinato) invece di usare DTO. Più complesse sono le entità, più il codice è disordinato. (Significa anche che funziona abbastanza bene con entità insignificanti.) Ayende lo chiama anche Stripper Pattern e spiega il problema dell'incapsulamento.
Non capire l' ignoranza della persistenza e scrivere applicazioni NH come quando si usa SQL esplicito. Sintomo di ciò: chiamare Update dopo aver modificato un oggetto, chiedendosi perché le modifiche persistano anche se Update non era stato chiamato, chiedendosi come evitare che le modifiche persistessero.
Non capire le transazioni e l' unità del modello di lavoro . Anti-pattern frequenti: transazioni implicite, sessione per operazione e sessione per applicazione. Qualche altra lettura:
Utilizzo degli eventi NH per inserire la logica dell'applicazione (ad es. Rilevamento delle modifiche nei trigger di inserimento e aggiornamento)
Crea una classe per tabella . Alcune persone non capiscono OOD, altre non capiscono il design relazionale.
Errori
uso di uno a uno invece di molti a uno. L'ho provato a spiegare in questa risposta .
Utilizzo di join fetch in combinazione con SetMaxResult. Le mie ultime risposte relative a quell'argomento:
Scrivere entità mutevoli . Quando un'entità non restituisce esattamente il valore impostato da NH, viene considerata sporca e viene aggiornata in ogni sessione. Ad esempio: sostituzione della raccolta persistente NH in un setter proprietà.
IList<Address> Addresses
{
get { return addresses; }
// will cause the addresses collection to be built up from scratch
// in the database in every session, even when just reading the entity.
set { addresses = new List<Address>(value); }
}
int Whatever
{
// will make the entity dirty after reading negative values from the db.
// this causes unexpected updates after just reading the entity.
get { if (whatever < 0) return 0; }
set { whatever = value; }
}
Potrebbe essere di più sta seguendo.