Мне нужно хранить мои перечисления в базе данных как varchar вместо nvarchar, поэтому я использую отображение «AnsiString» следующим образом:
public class Document
{
public virtual int Id { get; set; }
public virtual string Content { get; set; }
public virtual DocType Type { get; set; }
}
public enum DocType
{
Word,
Excel
}
public class DocumentMap : ClassMap<Document>
{
public DocumentMap()
{
Id(d => d.Id);
Map(d => d.Content);
Map(d => d.Type).CustomType("AnsiString");
}
}
Сохранение в базе данных работает нормально, но когда дело доходит до поиска, я получаю сообщение об ошибке:
NHibernate.PropertyAccessException: Invalid Cast (проверьте соответствие в соответствии с типами свойств); сеттер Core.Document
Работает нормально, когда я удаляю CustomType ("AnsiString") из сопоставления.
Есть предложения?
Вот хбм:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" name="Core.Document, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Document`">
<id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="identity" />
</id>
<property name="Content" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Content" />
</property>
<property name="Type" type="AnsiString">
<column name="Type" />
</property>
</class>
</hibernate-mapping>