「Fluent NHibernate/フルーエントマッピング/NOT NULL」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「Fluent NHibernateで「'''NOT NULL'''」を用いる方法、およびその際の注意事項について。 == エンティティ == エンティティにおけ...」)
(相違点なし)

2012年7月12日 (木) 09:30時点における版

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

関連項目

参考文献


外部リンク