clase - Mapeo Enum como cadena en NHibernate 3.2 mapeo por código
clase enum c# (1)
Al usar 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.
Por ejemplo:
public class Account {
public enum StateType { Pending, Active, Cancelled, Suspended }
...
public virtual StateType State { get; set; }
...
}
En la asignación XML, puede usar NHibernate.Type.EnumStringType
(vea este enlace ), pero ¿cómo lo hago en la asignación 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);
Actualizar:
Al usar esta asignación, logré que se guardara como una cadena en la base de datos, pero ahora obtengo una excepción al cargar desde la base de datos al modelo de objetos.
map.Property(x => x.State, attr => { attr.Type(NHibernateUtil.String); });
Esta es la excepción que recibo al intentar cargar el objeto:
Invalid Cast (check your mapping for property type mismatches); setter of Model.Account
¡Lo tengo! La siguiente sintaxis funciona:
map.Property(x => x.State, attr => attr.Type<NHibernate.Type.EnumStringType<Account.StateType>>());