【发布时间】:2011-04-11 21:02:23
【问题描述】:
我有一个类,它有一个枚举类型,指示消息类型是电子邮件还是短信。枚举类型定义:
public enum ReminderType
{
Email = 1,
Sms = 2
}
使用这种类型的类如下所示:
public class Reminder : EntityBase
{
public virtual string Origin { get; set; }
public virtual string Recipient { get; set; }
public virtual ReminderType Type { get; set; }
public virtual Business Business { get; set; }
public virtual DateTime Created { get; set; }
public Reminder()
{
Created = DateTime.UtcNow;
}
}
但是,当我尝试将 Reminder 类型的实体持久保存到数据库时,我收到以下错误:
System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting the nvarchar value 'Email' to data type int.
支持字段的类型为int,所以我不确定NHibernate 为什么默认尝试映射字符串表示。我用的是Fluent NHibernate,相关的映射代码是:
mappings.Override<Reminder>(map =>
{
map.Map(x => x.Type).Column("Type")
});
我很确定 NHibernate 的默认行为是将枚举映射为整数,那么为什么在这种情况下不这样做呢?如果这很重要,我正在使用 SQL Server 2005。
【问题讨论】:
-
Email 是 Type 属性的字符串值。 Nhibernate 应该尝试将其存储为整数值 1,但它尝试存储字符串“Email”,因此出现错误。我不确定它为什么会这样做......
标签: sql-server-2005 nhibernate fluent-nhibernate