Ho modello di entità che voglio essere riflessa per database ogni volta che corro applicazione, ma senza cancellare i dati così sto usando SchemaUdpate
con fluente metodo mappature NHibernate in modoCome modificare la colonna utilizzando la funzionalità 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);
Quindi il mio modello di entità viene aggiornato correttamente quasi tutto il tempo. Il problema è che quando si modifica la definizione di una struttura, diciamo avevo tale proprietà
[CustomSqlType("nvarchar(400)")]
public virtual string Name { get; set; }
CustomSqlType
è solo un attributo che verrà applicato da un certo convenzione quando mapping vengono caricati. In questo caso, la proprietà Name verrà creata come campo nvarchar(400)
. Ma se in futuro a cambiare la definizione di questo
[CustomSqlType("nvarchar(500)")]
public virtual string Name { get; set; }
di file di hbm.xml corretta sarebbe generato (mezzi corretta nvarchar (500)), ma la colonna nel database non viene aggiornato se tale evento è valido alter dalla prospettiva db. E 'possibile modificare la colonna esistente (generare alter script) con un nuovo vincolo lunghezza/precisione/nullable usando SchemaUpdate
?
Che puzza davvero. Cosa hai finito per forzare un aggiornamento sul tuo schema? – Mithon
grazie! Ho passato anni a cercare di scoprire perché non sembra aggiornare i miei limiti predefiniti! - Sei riuscito a trovare una soluzione alternativa? – Zack