2011-11-02 5 views
9

私はアプリケーションを実行するたびにデータベースに反映されるエンティティモデルを持っていますが、データをクリアしないので、私は流暢なnhibernateマッピングメソッドを使ってSchemaUdpateを使用していますnhibernate SchemaUpdate機能を使用して列を変更する方法

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); 

したがって、正確にほとんどすべての時間。問題は、プロパティの定義を変更すると、そのプロパティがあると言うことができます。

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

CustomSqlTypeは、マッピングがロードされるときに特定の規則によって適用される属性です。この場合、Nameプロパティはnvarchar(400)フィールドとして作成されます。しかし、将来、この

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

に正しいhbm.xmlファイルが生成される(正しいことはnvarchar(500)を意味する)が変更されても、 dbの観点から。 SchemaUpdateを使用して、既存の列を新しい長さ/精度/ NULL可能な制約で変更(変更スクリプトを生成)することは可能ですか?

答えて

9

さて、下のあなたは、列が存在する場合、それはデフォルトでは何もしない見たよう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 
     } 

によって実行されるコードがあります。

+0

それは本当に悪臭を放つ。スキーマを更新するために何をしましたか? – Mithon

+0

ありがとう!なぜ私のデフォルトの制約を更新していないのかを調べようと、年を重ねてきました! - 回避策を見つけることができましたか? – Zack

関連する問題