2009-03-04 17 views
7

Sto tentando di implementare un repository Soft-Deletable. Di solito questo può essere fatto facilmente con un listener di eventi di cancellazione. Per filtrare le entità eliminate, posso aggiungere un attributo Where al mio mapping di classe. Tuttavia, è necessario implementare altri due metodi nel repository per questa entità: Restore e Purge. Il ripristino invierà le entità "Annulla" e Purge le eliminerà definitivamente. Ciò significa che non è possibile utilizzare l'attributo Where (dal momento che blocca le entità eliminate temporaneamente a qualsiasi accesso)I filtri NHibernate non funzionano con Session.Get

Ho provato a utilizzare i filtri . Posso creare un filtro e abilitarlo o disabilitarlo all'interno della sessione per ottenere lo stesso risultato. Ma il problema è che i filtri non hanno alcun effetto sul metodo Session.Get (influiscono solo sull'accesso basato su ICriteria).

Qualche idea su come risolvere questo problema?

Grazie

+0

hai mai trovato una soluzione per questo? – kmoo01

+0

No. I filtri non funzionano su Get. Hanno effetto solo sui criteri. Ho dovuto implementare un approccio diverso sul repository di base solo per Get e lasciare che Filter gestisca gli altri casi d'uso. – Khash

risposta

2

citazione da Fabio Maulo:

Con design.Filters non funzionano con Get o Load poiché significano: Voglio carico dell'ente con questo ID.

filtri dinamici lavorano con HQL/Criteri e Collezione (se abilitato per una collezione) solo quando si utilizza esplicito join o, più in generale, quando il QuerySpace di una partita filtro con il QuerySpace di una query.

0
Sarebbe

un'opera IInterceptor per questo?

Guardando a EmptyInterceptor trovo che ha un OnLoad che penso si possa usare per intercettare il caricamento dell'oggetto.

Problemi correlati