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

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「Fluent NHibernateMySQLの組み合わせでは、C#の列挙型は文字列扱いとなる。 == エンティティ == <source lang="csharp"> //...」)
(相違点なし)

2012年7月8日 (日) 10:30時点における版

Fluent NHibernateMySQLの組み合わせでは、C#の列挙型は文字列扱いとなる。

エンティティ

// 列挙型
public enum Level
{
    User = 1,
    PowerUser,
    Administrator,
    God,
}

// エンティティ
public class User
{
    public virtual long Id { get; protected set; }
    public virtual Level Level { get; set; }
}

マッピング

//

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

        Map(x => x.Level);
    }
}

スキーマ

CREATE TABLE User (
  Id bigint(20) NOT NULL AUTO_INCREMENT,
  Level varchar(255) DEFAULT NULL,
  PRIMARY KEY (Id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

備考

列挙型の範囲外の値を指定してもエラーにはならず、数字が文字列として格納される。

using (var session = factory.OpenSession())
using (var transaction = session.BeginTransaction())
{
    // Level列挙型は1~4までだが、0と5を指定してみる。
    // エラーにはならない。
    for (int i = 0; i <= 5; i++)
    {
        var user = new User();
        user.Level = (Level)i;
        session.SaveOrUpdate(user);
    }
    transaction.Commit();
}

解決策

知らん。


関連項目

参考文献


外部リンク