Domanda

Quindi, ho costruito un bel modello di dominio. I repository gestiscono l'accesso ai dati e cosa no. Sono emersi nuovi requisiti che indicano che è necessario registrare i motivi con le eliminazioni. Fino ad ora, le eliminazioni sono state abbastanza semplici = > Entity.Children.Remove (bambino). Non si stava verificando il rilevamento delle modifiche interne poiché il mio strumento ORM gestiva la gestione dello stato. Tuttavia, non sono sicuro di come gestirlo.

1) Potrei mantenere una raccolta figlio eliminata nell'entità padre ed estrarre il rilevamento delle modifiche da nHibernate e gestirlo da solo.

2) ??????

È stato utile?

Soluzione

Ok, sembra folle e sto per fare un altro tentativo, anche se potrei essere sculacciato per un cattivo utilizzo di nHibernate. Prima di eliminare, perché non selezioni i figli che verranno eliminati (hai già i loro ID corretti?) E fai una trasformazione in qualsiasi entità che utilizzerai per registrare le tue eliminazioni su una tabella. Aggiungi il motivo alle entità e salvale, quindi procedi con le tue eliminazioni. La parte migliore, è possibile utilizzare un'entità generica, ad es. & Quot; auditInfo " per il risultato della trasformazione, e puoi farlo all'interno di una transazione in modo da poter eseguire il rollback di tutto se qualcosa non riesce! OK, forse pazzo ma creativo, vero?

Altri suggerimenti

Potresti implementare IInterceptor interface e sovrascrivere la funzionalità onDelete per estrarre le informazioni necessarie dall'entità e inviarle al logger prima di eliminare (utilizzando NHibernate ovviamente)? ??

esempio

Se le eliminazioni sono relativamente rare per quel particolare tipo di entità, aggiungerei un flag all'entità per contrassegnarlo come logicamente "cancellato". piuttosto che eliminare effettivamente la riga. La domanda dovrebbe quindi gestire il nascondiglio di queste entità in circostanze normali.

Se ciò causasse un numero inaccettabile di "stantio" righe - Suggerirei qualcosa di simile alla risposta di Watson. A seconda dei requisiti esatti, potresti probabilmente cavartela registrando i dati cancellati e una "motivazione" aggiuntiva campo da qualche parte direttamente dall'applicazione. L'uso degli intercettori è più trasparente e più piacevole dal punto di vista del controllo, ma un registro di eliminazione separato (tabella, database, file) è probabilmente più semplice.

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