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

提供:MonoBook
imported>Administrator
ページの作成:「Fluent NHibernateで「'''NOT NULL'''」を用いる方法、およびその際の注意事項について。 == エンティティ == エンティティにおけ...」
 
imported>Administrator
編集の要約なし
 
9行目: 9行目:
public class ForeverNote
public class ForeverNote
{
{
public long Id { get; protected set; }
    public long Id { get; protected set; }


private string _memo;
    private string _memo;


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


}
}
37行目: 37行目:
{
{
     public ForeverNoteMap
     public ForeverNoteMap
{
    {
         Id(x => x.Id)
         Id(x => x.Id)
.GeneratedBy.Identity();
            .GeneratedBy.Identity();
       
Map(x => x.Memo)
        Map(x => x.Memo)
.Length(1048576)
            .Length(1048576)
.Not.Nullable()
            .Not.Nullable()
.Default("");
            .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("");
    }
}

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]


外部リンク[編集 | ソースを編集]