2011-11-02 8 views
9

Tengo modelo de entidad que quiero ser reflejada a la base de datos cada vez que ejecute la aplicación, pero sin borrar los datos así que estoy usando SchemaUdpate con fluidez método de asignaciones de NHibernate de una maneraCómo modificar la columna usando la funcionalidad SchemaUpdate nhibernate

var config = Fluently.Configure().Database 
(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString)); 
//here I add mappings , apply conventions, build configuration, etc... 
// 
new SchemaUpdate(configuBuild).Execute(doUpdate: true, script: true); 

Así que mi modelo de entidad se actualiza correctamente casi todo el tiempo. El problema es que cuando me altero definición de una propiedad, digamos que tenía dicha propiedad

[CustomSqlType("nvarchar(400)")] 
public virtual string Name { get; set; } 

CustomSqlType es sólo un atributo que será aplicado por una cierta convención cuando se cargan las asignaciones. En este caso, la propiedad Name se crearía como el campo nvarchar(400). Pero si en el futuro cambio de la definición de este

[CustomSqlType("nvarchar(500)")] 
public virtual string Name { get; set; } 

de archivo hbm.xml correcta sería generada (correcta nvarchar medios (500)), pero la columna en la base de datos no se actualiza cuando tal evento alter es válida desde la perspectiva db. ¿Es posible alterar (generar una secuencia de comandos alternada) la columna existente con la nueva restricción de longitud/precisión/nulable usando SchemaUpdate?

Respuesta

9

bien he encontrado que es imposible, a continuación hay código ejecutado por SchemaUpdate

foreach (Column column in ColumnIterator) 
     { 
      IColumnMetadata columnInfo = tableInfo.GetColumnMetadata(column.Name); 
      if (columnInfo != null) 
      { 
       continue; 
      } 

      // the column doesnt exist at all. 
      // other not important code 
     } 

Como se puede ver que no hace nada por defecto si existe la columna.

+0

Eso realmente apesta. ¿Qué terminaste haciendo para forzar una actualización en tu esquema? – Mithon

+0

gracias! Pasé años intentando descubrir por qué no parece actualizar mis restricciones predeterminadas. - ¿Has logrado encontrar una solución alternativa? – Zack

Cuestiones relacionadas