メインメニューを開く

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("");
    }
}

関連項目編集

参考文献編集


外部リンク編集