2012-03-03 10 views
1

hbm.xmlベースのnhibernateプロジェクトをコードによるマッピングに移行しようとしています。バージョンのセクションが正常に動作しない問題が発生しています。 hbm.xmlでは私が持っている:Nhibernate 3.2コードによるマッピング - バージョン(同時実行性)

<バージョン名= "バージョン" 列=」Version "タイプ=" のInt32" 保存されていない値を= "0" />

私は次のようなマッピングを試してみました:

 Version(x => x.Version, m => 
     { 
      m.Column(c => 
      { 
       c.SqlType("Int32"); 
       c.Name("Version"); 
      }); 
      m.Generated(VersionGeneration.Always); 
      m.UnsavedValue(0); 
      m.Insert(true); 
      m.Type(new NHibernate.Type.Int32Type()); 
     }); 

しかし、何も、元のhbm.xmlと同じマッピングを生成するようで、彼らはすべてのタイプ=「のInt32」せずに終わります。どのように私はこれを行うことができますか、3.2でサポートされている場合、誰もが任意のアイデアを持っていますか?

乾杯

更新:プロパティのバージョンが既にint32型のタイプそしてそれはHBMファイルに挿入されていない場合には

が私の答え

+0

作業マッピングを含む回答を作成し、それに正しいものとしてフラグを立てることを心配しないでください。これはSOに完全に合法です。 – Fourth

答えて

2

トニコメントに続いて、私はに私のマッピングを変更しました

1

を参照してください。実際のタイプが異なる場合は、型部分はxmlファイルに書き込まれると思います。例(ドメインエンティティはINT32使用していますが、我々はint64型を使用して、それをマップしたい):

私の元のhbm.xmlとして働くことを証明
Version(x => x.Version, mapper => 
     { 
      mapper.Generated(VersionGeneration.Never); 
      mapper.UnsavedValue(0); 
      mapper.Type(new NHibernate.Type.Int32Type()); 
     }); 

// in the domain entity 
public int RowVersion{get;set;} 

// Mapping 
this.Version(x => x.RowVersion, mapper => 
    { 
     mapper.Generated(VersionGeneration.Never); 
     mapper.UnsavedValue(0); 
     mapper.Type(new NHibernate.Type.Int64Type()); 
    }); 

// Xml file 
<version name="RowVersion" type="Int64" unsaved-value="0" /> 
+0

あなたのsujestionを試しましたが、モデルを保存するときに次のエラーが発生しました。 '無効なキャスト(プロパティタイプの不一致のマッピングを確認してください)。 Models.Tester' のセッターは、ちょうどこれに私のorginalのマッピングを変更: '版(X => x.Version、マッパー=> {mapper.Generated(VersionGeneration.Never); mapper.UnsavedValue(0);マッパー。タイプ(新しいNHibernate.Type.Int32Type());}); ' そして、それはhbm.xmlを使用したときと同じように機能しました – SteveC

関連する問題