「Fluent NHibernate/フルーエントマッピング/NOT NULL」の版間の差分
imported>Administrator ページの作成:「Fluent NHibernateで「'''NOT NULL'''」を用いる方法、およびその際の注意事項について。 == エンティティ == エンティティにおけ...」 |
imported>Administrator 編集の要約なし |
||
| 9行目: | 9行目: | ||
public class ForeverNote | public class ForeverNote | ||
{ | { | ||
public long Id { get; protected set; } | |||
private string _memo; | |||
public string Memo | |||
{ | |||
get { return _memo ?? "" } | |||
set { _memo = value ?? "" } | |||
} | |||
} | } | ||
| 37行目: | 37行目: | ||
{ | { | ||
public ForeverNoteMap | public ForeverNoteMap | ||
{ | |||
Id(x => x.Id) | Id(x => x.Id) | ||
.GeneratedBy.Identity(); | |||
Map(x => x.Memo) | |||
.Length(1048576) | |||
.Not.Nullable() | |||
.Default(""); | |||
} | |||
} | } | ||
</source> | </source> | ||
2012年7月12日 (木) 09:31時点における最新版
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("");
}
}
関連項目[編集 | ソースを編集]
参考文献[編集 | ソースを編集]