我试图映射表FRP,一个SQL Server 2005数据库,其包含一个枚举类:使用NHibernate的NCHAR列映射到一个枚举类型
public class MyClass{
private YesNoOptional addressSetting;
public YesNoOptional AddressSetting{
{get; set;}
}
}
public enum YesNoOptional {
Yes,
No,
Optional
}
这将决定将三个值中的一个插入相应的列 - 'Y','N','O'。此列的类型为nchar(1)。
我的映射文件是像这样(addressSetting是这是导致问题的属性):使用配置上面我收到以下错误
<class name="IncidentDefinition" table="IR_INCIDENT_DEF" lazy="false" >
<id name="Guid" column="INT_GUID" >
<generator class="guid"></generator>
</id>
<property name="Reference" column="INT_REF" ></property>
<property name="Description" column="INT_DESCRIPTION" ></property>
<property name="AddressSetting" column="INT_ADDRESS_REQ" ></property>
<property name="Active" column="INT_ACTIVE" type="YesNo"></property>
<property name="PinDocId" column="INT_PIN_DOC_ID"></property>
</class>
: NHibernate.ADOException:无法初始化集合: System.FormatException:输入字符串的不正确的格式..
如果我尝试使用如自定义类型,因此映射枚举:
<property name="AddressSetting" column="INT_ADDRESS_REQ" type="ML.Types.YesNoOptional, ML.Types" ></property>
错误:System.FormatException:输入字符串的格式不正确。
接下来,如果我尝试使用像一个特定类型的,以便:
<property name="AddressSetting" column="INT_ADDRESS_REQ" type="String" ></property>
产生此错误:NHibernate.PropertyAccessException:该System.String类型不能被分配给类型System.ArgumentException的属性:类型“System.String”的对象不能转换为类型“ML.Types.YesNoOptional” ..
作为最后一招我试图指定类型,像这样一个char:
<property name="AddressSetting" column="INT_ADDRESS_REQ" type="Char" ></property>
这个效果稍好一些,因为它不会抛出错误,但是不是从表中返回字符并将其映射到枚举类型,而是返回字符的ASCII值 - 所以Y由89表示!
我希望有人能解释我做错了什么,或者为什么会发生这种情况?
感谢
莫里斯
谢谢,但我是新来NHibernate和你能告诉我在哪里编辑SQL要做到这一点,请? – Morrislgn 2010-03-18 10:45:17