Usando el mapeo NHibernate 3.2 por código (no fluent-nhibernate), estoy tratando de asignar un campo Enum a una columna de cadena en lugar de la representación int predeterminada. No puedo obtener la sintaxis correcta.Asignación de Enum como cadena en el mapeo NHibernate 3.2 por código
Por ejemplo:
public class Account {
public enum StateType { Pending, Active, Cancelled, Suspended }
...
public virtual StateType State { get; set; }
...
}
En el mapeo XML, puede utilizar NHibernate.Type.EnumStringType
(ver this link), pero ¿cómo lo hago en la cartografía por código?
NHibernate.Mapping.ByCode.ModelMapper mapper = new NHibernate.Mapping.ByCode.ModelMapper();
mapper.Class<Account>(map => {
map.Id(x => x.Id, attr => {
attr.Column("id");
attr.Generator(NHibernate.Mapping.ByCode.Generators.Identity);
});
// Default 'int' mapping
//map.Property(x => x.State);
// Cannot implicitly convert type 'StateType' to 'NHibernate.Type.EnumStringType'
//map.Property<NHibernate.Type.EnumStringType<Account.StateType>>(x => x.State);
Actualización:
El uso de este mapeo, pude conseguirlo para guardar como una cadena a la base de datos, pero ahora me sale una excepción cuando se carga de la base de datos para el modelo de objetos.
map.Property(x => x.State, attr => { attr.Type(NHibernateUtil.String); });
Esta es la excepción consigo al intentar cargar el objeto:
Invalid Cast (check your mapping for property type mismatches); setter of Model.Account