差分

ナビゲーションに移動 検索に移動

Fluent NHibernate/フルーエントマッピング/列挙型

1,578 バイト追加, 2012年7月8日 (日) 10:30
ページの作成:「Fluent NHibernateMySQLの組み合わせでは、C#の列挙型は文字列扱いとなる。 == エンティティ == <source lang="csharp"> //...」
[[Fluent NHibernate]]と[[MySQL]]の組み合わせでは、[[C Sharp|C#]]の列挙型は文字列扱いとなる。

== エンティティ ==
<source lang="csharp">
// 列挙型
public enum Level
{
User = 1,
PowerUser,
Administrator,
God,
}

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

== マッピング ==
//
<source lang="csharp">
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id).GeneratedBy.Identity();

Map(x => x.Level);
}
}
</source>

== スキーマ ==
<source lang="csharp">
CREATE TABLE User (
Id bigint(20) NOT NULL AUTO_INCREMENT,
Level varchar(255) DEFAULT NULL,
PRIMARY KEY (Id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</source>

== 備考 ==
列挙型の範囲外の値を指定してもエラーにはならず、数字が文字列として格納される。
<source lang="csharp">
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();
}
</source>

== 解決策 ==
知らん。
{{stub}}

== 関連項目 ==
* [[Fluent NHibernate]]
* [[Fluent NHibernate/フルーエントマッピング]]

== 参考文献 ==
<references/>

== 外部リンク ==

{{stub}}
匿名利用者

案内メニュー