Я пытаюсь сопоставить таблицу frp, БД SQL Server 2005, с классом, содержащим перечисление:
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' ..
В крайнем случае я попытался указать тип как символ:
<property name="AddressSetting" column="INT_ADDRESS_REQ" type="Char" ></property>
Это работает немного лучше, так как в нем не выдается ошибка, однако вместо того, чтобы возвращать символ из таблицы и отображать его в перечисляемом типе, вместо него возвращается значение символа ASCII - так что Y представляется как 89 !
Я надеюсь, что кто-то может объяснить, что я делаю неправильно и \ или как, почему это происходит, пожалуйста?
Спасибо
Morris