Fluent NHibernate/フルーエントマッピング/NOT NULL

提供: MonoBook
< Fluent NHibernate‎ | フルーエントマッピング
2012年7月12日 (木) 09:31時点におけるimported>Administratorによる版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Fluent NHibernateで「NOT NULL」を用いる方法、およびその際の注意事項について。

エンティティ[編集 | ソースを編集]

エンティティにおける見どころは、Memoプロパティにおいてnull合体演算子を用いて、string型が絶対にnullを返さないようにしているところ。

これを書いていてC#null許容型ではなくnull排除型が欲しいと思った。そんなものはない。

public class ForeverNote
{
    public long Id { get; protected set; }

    private string _memo;

    public string Memo
    {
        get { return  _memo ?? "" }
        set { _memo = value ?? "" }
    }

}

マッピング[編集 | ソースを編集]

マッピングにおける見どころは、「Not.Nullable()」としている箇所と、「Default("")」としている箇所である。

「Not.Nullable()」は見たままなので問題ないと思う。 この指定によりデータベース側のテーブルのカラムにNOT NULL属性が付く。

問題は次の「Default("")」のところ。 個人的にハマったのが、これを指定しておけばエンティティ側のプロパティnullのときに、デフォルト値として入力してくれるだろうなと期待していたが、世の中そんなに甘くなく実行時にエラーとなって残念賞となった。

おかげでC#自動プロパティを全部普通のプロパティに書き換えるというクソ面倒な作業が発生しましたとさ。やっぱりC#null許容型ではなくnull排除型が欲しいと思った。そんなものはない。

public class ForeverNoteMap : ClassMap<ForeverNote>
{
    public ForeverNoteMap
    {
        Id(x => x.Id)
            .GeneratedBy.Identity();
        
        Map(x => x.Memo)
            .Length(1048576)
            .Not.Nullable()
            .Default("");
    }
}

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]


外部リンク[編集 | ソースを編集]