差分

ナビゲーションに移動 検索に移動

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

2,097 バイト追加, 2012年7月12日 (木) 09:30
ページの作成:「Fluent NHibernateで「'''NOT NULL'''」を用いる方法、およびその際の注意事項について。 == エンティティ == エンティティにおけ...」
[[Fluent NHibernate]]で「'''NOT NULL'''」を用いる方法、およびその際の注意事項について。

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

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

<source lang="csharp">
public class ForeverNote
{
public long Id { get; protected set; }

private string _memo;

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

}
</source>

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

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

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

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

<source lang="csharp">
public class ForeverNoteMap : ClassMap<ForeverNote>
{
public ForeverNoteMap
{
Id(x => x.Id)
.GeneratedBy.Identity();

Map(x => x.Memo)
.Length(1048576)
.Not.Nullable()
.Default("");
}
}
</source>

== 関連項目 ==
* [[Fluent NHibernate]]
* [[Fluent NHibernate/フルーエントマッピング]]

== 参考文献 ==
<references/>

== 外部リンク ==

{{stub}}
匿名利用者

案内メニュー