通过代码使用NHibernate 3.2映射(不是fluent-nhibernate),我试图将Enum字段映射到字符串列而不是默认的int表示。我无法得到正确的语法。
例如:
public class Account {
public enum StateType { Pending, Active, Cancelled, Suspended }
...
public virtual StateType State { get; set; }
...
}
在XML映射中,您可以使用NHibernate.Type.EnumStringType
(请参阅this link),但如何按代码映射呢?
NHibernate.Mapping.ByCode.ModelMapper mapper = new NHibernate.Mapping.ByCode.ModelMapper();
mapper.Class<Account>(map => {
map.Id(x => x.Id, attr => {
attr.Column("id");
attr.Generator(NHibernate.Mapping.ByCode.Generators.Identity);
});
// Default 'int' mapping
//map.Property(x => x.State);
// Cannot implicitly convert type 'StateType' to 'NHibernate.Type.EnumStringType'
//map.Property<NHibernate.Type.EnumStringType<Account.StateType>>(x => x.State);
更新
使用这种映射,我设法将它作为字符串保存到数据库中,但是现在从数据库加载到对象模型时会出现异常。
map.Property(x => x.State, attr => { attr.Type(NHibernateUtil.String); });
这是我在尝试加载对象时遇到的异常:
Invalid Cast (check your mapping for property type mismatches); setter of Model.Account
答案 0 :(得分:27)
知道了!以下语法有效:
map.Property(x => x.State, attr => attr.Type<NHibernate.Type.EnumStringType<Account.StateType>>());