Fluent NHibernate/フルーエントマッピング/列挙型
ナビゲーションに移動
検索に移動
Fluent NHibernateとMySQLの組み合わせでは、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();
}
+----+---------------+ | Id | Level | +----+---------------+ | 1 | 0 | | 2 | User | | 3 | PowerUser | | 4 | Administrator | | 5 | God | | 6 | 5 | +----+---------------+
解決策
知らん。
関連項目
参考文献