我試圖映射表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