2010-10-27 9 views
9

Quando si utilizza un ORM (in particolare NHibernate), come viene gestito il refactoring dei dati? Voglio dire, se gli oggetti dati cambiano in modo tale che lo schema del DB relazionale sottostante cambia, l'ORM offre aiuto negli aggiornamenti/downgrade dello schema nel DB? Che ne dici della migrazione dei dati esistenti nel nuovo schema?NHibernate, ORM: come viene gestito il refactoring? dati esistenti?

Sono in procinto di prendere una decisione sull'utilizzo di un ORM e un'esposizione molto limitata. Per favore, sopportami se le domande sono ingenue.

risposta

16

In NHibernate, è possibile utilizzare la classe SchemaUpdate per apportare modifiche aggiuntive allo schema. (Le modifiche aggiuntive includono nuove tabelle, nuove colonne, ecc., Ma non eliminazioni.) SchemaUpdate è destinato a scopi di sviluppo e non è concepito per essere eseguito in produzione. Consiglio vivamente di controllare uno strumento di migrazione SQL come Tarantino, dbdeploy.net, RikMigrations o simili.

Gli strumenti di migrazione sono disponibili in due versioni: basata su script SQL (Tarantino e dbdeploy.net) e basata su codice (migrazioni in stile RikMigrations e Rails). Con uno strumento di migrazione basato su codice, si scrivono le migrazioni utilizzando il codice scritto in C#, VB, Ruby, ... Gli strumenti basati su script SQL richiedono un set ordinato di script SQL. In entrambi i casi, lo strumento di migrazione esegue eventuali migrazioni sul database che non sono state eseguite prima. (In genere una tabella migrazioni elenca gli script che sono stati eseguiti e permette lo strumento per capire quali devono ancora essere eseguito.) Gli script SQL vengono generati tramite:

// SchemaUpdate.Execute(bool script, bool doUpdate) 
new SchemaUpdate(cfg).Execute(true, false); 

e poi modificati a piacere. Oppure è possibile generare un nuovo schema utilizzando SchemaExport di NHibernate e utilizzando uno strumento di definizione dello schema come Microsoft Visual Studio per Database Professionals Ultimate Now con Extra Mayo Edition (aka DataDude) o RedGate SQL Compare. Dovresti scrivere gli script di trasformazione a mano in quanto in generale non esiste alcun modo per lo strumento di migrazione SQL di sapere che la colonna Foo char (1) piena di T/F deve essere trasformata in quella colonna bit di Bar.

Personalmente preferisco gli strumenti di migrazione basati su script SQL in quanto posso generare le differenze dello schema utilizzando uno strumento e quindi modificare per assaggiare piuttosto che dover eseguire manualmente l'intera migrazione utilizzando C# o un linguaggio simile.

+0

+1 per un'ottima risposta. –

+0

Questo è fantastico. Sarebbe bello vedere link a ulteriori risorse/blog su questo. – syclee

Problemi correlati