差分
ナビゲーションに移動
検索に移動
ページの作成:「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}}
== エンティティ ==
エンティティにおける見どころは、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}}