2010-10-27 22 views
9

Al usar un ORM (específicamente NHibernate), ¿cómo se maneja la refacturación de datos? Quiero decir, si los objetos de datos cambian de tal manera que el esquema subyacente de la base de datos relacional cambia, ¿el ORM ofrece alguna ayuda en las actualizaciones/revisiones de esquema en la base de datos? ¿Qué hay de la migración de datos existentes al nuevo esquema?NHibernate, ORM: ¿cómo se maneja la refactorización? ¿los datos existentes?

Estoy en el proceso de tomar una decisión sobre el uso de un ORM y tengo una exposición muy limitada. Por favor, tengan paciencia si las preguntas son ingenuas.

Respuesta

16

En NHibernate, puede usar la clase SchemaUpdate para realizar cambios aditivos en su esquema. (Los cambios adicionales incluirían nuevas tablas, nuevas columnas, etc., pero no se eliminarán). SchemaUpdate está destinado a fines de desarrollo y no está destinado a ejecutarse en producción. Recomiendo consultar una herramienta de migración SQL como Tarantino, dbdeploy.net, RikMigrations o similar.

Las herramientas de migración vienen en dos sabores: SQL basado en script (Tarantino y dbdeploy.net) y basado en código (RikMigrations y Rails-style migrations). Con una herramienta de migración basada en código, usted escribe sus migraciones usando un código escrito en C#, VB, Ruby, ... Las herramientas basadas en script SQL toman un conjunto ordenado de scripts SQL. En cualquier caso, la herramienta de migración ejecuta migraciones contra su base de datos que no se han ejecutado antes. (Normalmente, una mesa de migraciones se enumeran las secuencias de comandos que se han ejecutado y permite que la herramienta para averiguar qué todavía hay que ejecutar.) Las secuencias de comandos SQL se generan a través de:

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

y luego editadas al gusto. O bien, podría generar un nuevo esquema utilizando SchemaExport de NHibernate y utilizando una herramienta de diferencia de esquema como Microsoft Visual Studio para Professionals de base de datos Ultimate Now con Extra Mayo Edition (también conocido como DataDude) o RedGate SQL Compare. Tendrá que escribir scripts de transformación a mano, ya que no hay forma en general para que la herramienta de migración de SQL sepa que esa columna Foo char (1) llena de T/F debe transformarse en esa columna Bar bit.

Personalmente prefiero las herramientas de migración basadas en scripts SQL, ya que puedo generar los diffs de esquema usando una herramienta y luego editar para probar en lugar de tener que realizar manualmente la migración completa usando C# o un lenguaje similar.

+0

+1 para una excelente respuesta. –

+0

Esto es genial. Sería genial ver enlaces a otros recursos/blogs sobre esto. – syclee

Cuestiones relacionadas