「Fluent NHibernate/フルーエントマッピング/列挙型」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator (ページの作成:「Fluent NHibernateとMySQLの組み合わせでは、C#の列挙型は文字列扱いとなる。 == エンティティ == <source lang="csharp"> //...」) |
imported>Administrator (→備考) |
||
45行目: | 45行目: | ||
== 備考 == | == 備考 == | ||
列挙型の範囲外の値を指定してもエラーにはならず、数字が文字列として格納される。 | 列挙型の範囲外の値を指定してもエラーにはならず、数字が文字列として格納される。 | ||
+ | 範囲内の物については、列挙型の各名称が文字列として格納される。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
using (var session = factory.OpenSession()) | using (var session = factory.OpenSession()) | ||
60行目: | 61行目: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | <pre> | ||
+ | +----+---------------+ | ||
+ | | Id | Level | | ||
+ | +----+---------------+ | ||
+ | | 1 | 0 | | ||
+ | | 2 | User | | ||
+ | | 3 | PowerUser | | ||
+ | | 4 | Administrator | | ||
+ | | 5 | God | | ||
+ | | 6 | 5 | | ||
+ | +----+---------------+ | ||
+ | </pre> | ||
== 解決策 == | == 解決策 == |
2012年7月8日 (日) 10:32時点における最新版
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 | +----+---------------+
解決策[編集 | ソースを編集]
知らん。
関連項目[編集 | ソースを編集]
参考文献[編集 | ソースを編集]