2011-10-19 8 views
0

私はこのマッピングを持っています: Map(x => x.FileAs).Length(200).Default( "")Not.Nullable();プロパティマッピングの作成方法デフォルトはFluent NHibernateを使用した挿入時に適用されます

データベーススキーマはすでに存在し、その列はNULLを許可せず、デフォルト値もありません。ライブデータベースの変更はオプションではありません。

NHibernateは、現在の値がnullの場合、挿入中に指定されたデフォルト値に値を設定することができますか?

Fluent NHibernateのドキュメントは非常に簡潔です。これまでの検索ではこれが可能かどうかは示されていませんでした。

おかげで、 アーロン

答えて

2

あなたはNHibernateのは、デフォルト値を設定するようにしてくださいカント。マッピング内のDefault("")は、NHibernateが生成できるDBスキーマにのみ影響します。

エンティティのプロパティの既定値をいくつか適用する必要がある場合は、コンストラクタでそれを行いませんか?

+0

値は、それらがnullにすることができます別のソースから読み込まれます。また、1つのマッピング構成クラスにデフォルトのものを含めてサーバー側のマッピングを維持する方がクリーンです。 – Aaron

1

はい私はあなたができると信じています。あなたのマッピングで次のことをチェックアウトする必要があります:

(7)動的更新(オプション、デフォルトはfalse): UPDATE SQLが実行時に生成され、その値が変更されているのみ 列が含まれているべきであることを指定します。 実行時にINSERT SQLを生成し、その値がNULLではない列 のみを含めるように指定します。 実行時にINSERT SQLを生成し、NULL値ではない列 を含めるように指定します(この場合、デフォルト値はfalseです)。

は、上記のはここから取られた:http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-class

流暢例:この場合

public class OrderMap : ClassMap<Order> 
{ 
    public OrderMap() 
    { 
     DynamicInsert(); 
     DynamicUpdate(); 
     Table("ORDER"); 
     Id(x => x.OrderId, "ORDER_ID"); 
    } 
} 
+0

残念ながら、これはヌルであるためプロパティを完全に無視し、データベースはヌルにはならないと不平を言うでしょう。私がしたいのは、NHibernateがNULLであると見なしてデフォルト値を持つカラムをインクルードするための挿入です。 – Aaron

+0

これは、データベースのデフォルト値です。 NHibernateが挿入にそれを含まないなら、それはデフォルトのデータベースのデフォルトになります。 –

+0

私はまた、Map(x => Order.Details).Length(500)はテキストをトリミングしないことを知りました。そこでは基になるデータベース列はntextです。したがって、NHibernateはデータ変換を提供します。列にデータコンバータクラスを登録できますか?データベース内のすべてのものが良いとは言えますが、変換が必要な場合もあります。完全に異なるシステムではなく、マッピングを拡張したいと考えています。 – Aaron

関連する問題