2011-11-02 19 views
9

Uygulamayı her çalıştırdığımda veritabanına yansıtmak istediğim varlık modelim var, ancak verileri temizlemedenNhibernate SchemaUpdate işlevselliğini kullanarak sütun nasıl değiştirilir

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); 
hemen hemen her zaman doğru. Sorun, bir özelliğin tanımını değiştirdiğimde,

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

CustomSqlType gibi özelliklerin eşleme yapıldığında belirli bir sözleşmeyle uygulanacak bir özellik olduğunu söyleyeceğim. Bu durumda, Name özelliği nvarchar(400) alanı olarak oluşturulacaktır. Ama eğer gelecekte bu

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

değerini değiştirdiğimde doğru hbm.xml dosyası oluşturulacak (doğru araç nvarchar (500)) ancak veritabanındaki sütun güncellenmiş bir olay değil ancak bu değişiklik geçerli db perspektifinden. SchemaUpdate kullanarak varolan sütunu yeni uzunluk/hassasiyet/null kısıtlama ile değiştirmek mümkün mü?

cevap

9

Tamam, aşağıda sütun varsa varsayılan olarak hiçbir şey yapmaz Gördüğünüz gibi 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 
     } 

tarafından yürütülen kod yoktur.

+0

Bu gerçekten kokuyor. Şemanızdaki bir güncellemeyi zorlamak için ne yaptın? – Mithon

+0

teşekkürler! Varsayılan kısıtlamalarımı neden güncellemediğini anlamaya çalışırken yaşlarımı harcadım! - Geçici bir çözüm buldun mu? – Zack

İlgili konular