2008-12-14 25 views
53

Estoy intentando averiguar cómo usar la configuración de NHibernate con la asignación para actualizar los esquemas de tabla, en lugar de descartarlos y volver a crearlos.¿Cómo actualizar los esquemas de tabla de base de datos con la generación de esquema NHibernate?

Actualmente estoy usando el obj NHibernate.Tool.hbm2ddl.SchemaExport con FluentNHibernate para generar el esquema de base de datos para una base de datos mysql. Si bien no puedo decir que es un gran problema, cada vez que llamo al SchemaExport.Execute en la base de datos, va a soltar todas las tablas y luego volver a crearlas.

Lo que sería mucho más genial es si solo pudiera actualizar las estructuras de tablas existentes conservando los datos siempre que sea posible. Pero realmente no quiero usar un producto comercial, o un generador de código, porque no me gusta la generación de código en general, y no necesito esto lo suficiente como para considerar pagarlo. Así que con suerte cualquier respuesta tendría en cuenta estas advertencias.

Respuesta

64

El SchemaUpdate objeto proporciona la base de datos esquema de actualización, por parecer generar y ejecutar una serie de declaraciones ACTUALIZACIÓNSQL (así como las declaraciones de restricción) cuando es void Execute(bool script, bool doUpdate) función se llama. La clase SchemaUpdate se encuentra en el espacio de nombres NHibernate.Tool.hbm2ddl, que se puede encontrar en el archivo Nhibernate.dll.

SchemaUpdate se menciona en el capítulo 15 de la guía de conjunto de herramientas nhibernate 1.0.2, here (sección 15.1.5).

"El NHibernate FAQ" tenía (enlace ahora caducada) un ejemplo más completo de cómo utilizar SchemaUpdate:

[Test] 
public void Update_an_existing_database_schema() 
{ 
    _cfg = new Configuration(); 
    _cfg.Configure(); 
    _cfg.AddAssembly(Assembly.LoadFrom("DataLayer.dll")); 
    var update = new SchemaUpdate(_cfg); 
    update.Execute(true, false); 
} 
+1

no podemos modificar la configuración del terreno, una vez creado, por ejemplo, modificar la longitud de la cadena de nvarchar (255) a nvarchar (45), ¿podemos? –

+0

Esa es una buena pregunta, la versión de creación de hbm2ddl te permite hacer esto, pero he notado que a veces tengo que soltar las tablas antes de que la creación se ejecute correctamente. –

+0

Esto funciona de manera brillante, esta técnica también es adecuada para Fluent NHibernate. – Contango

Cuestiones relacionadas