メインメニューを開く

Fluent NHibernateでマッピング時にテキスト長を指定することで、データベースドライバーに応じて、データベース側(スキーマ)におけるテキスト系の型は自動的に決定される。

目次

エンティティ編集

エンティティクラスのNameプロパティとNoteプロパティはどちらも至って普通のstring型。

public class ForeverNote
{
    public virtual long Id { get; protected set; }
    public virtual string Name { get; set; }
    public virtual string Note { get; set; }
}

マッピング編集

マッピングクラスでLengthを設定する。 この際に指定した数値に応じて、Fluent NHibernateが自動的にVARCHARなのかTEXT系の型なのかを設定してくれる。

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

        Map(x => x.Name)
            .Not.Nullable()
            .Length(255);

        Map(x => x.Note)
            .Not.Nullable()
            .Length(1048576);
    }
}

スキーマ編集

Fluent NHibernateのデータベースドライバーをMySQLにして実行した結果できあがるスキーマは以下のような感じになる。 長さ255はVARCHAR、長さ1048576はMEDIUMTEXTとなっている。

CREATE TABLE ForeverNote (
  Id bigint(20) NOT NULL AUTO_INCREMENT,
  Name varchar(255) NOT NULL,
  Note mediumtext NOT NULL,
  PRIMARY KEY (Id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

関連項目編集

参考文献編集


外部リンク編集