Tengo una clase que tiene un tipo de enumeración que indica si el tipo de mensaje es Correo electrónico o SMS. El tipo de enumeración se define:NHibernate, SQL Server - mapping de enumeración a int
public enum ReminderType
{
Email = 1,
Sms = 2
}
La clase que utiliza este tipo se parece a:
public class Reminder : EntityBase
{
public virtual string Origin { get; set; }
public virtual string Recipient { get; set; }
public virtual ReminderType Type { get; set; }
public virtual Business Business { get; set; }
public virtual DateTime Created { get; set; }
public Reminder()
{
Created = DateTime.UtcNow;
}
}
Cuando trato de persistir una entidad de tipo recordatorio a la base de datos, sin embargo, me sale el siguiente error:
System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting the nvarchar value 'Email' to data type int.
el campo respaldo es de tipo int
, así que no estoy seguro de por qué NHibernate está tratando de trazar la representación de cadena por defecto. Estoy usando Fluido NHibernate, y el código de asignación relevante es:
mappings.Override<Reminder>(map =>
{
map.Map(x => x.Type).Column("Type")
});
Estoy bastante seguro el comportamiento predeterminado de NHibernate es mapear las enumeraciones como enteros, ¿por qué es no hacerlo en este caso? Estoy usando SQL Server 2005, si eso importa.
El correo electrónico es el valor de cadena de la propiedad Tipo. Nhibernate debería tratar de almacenarlo como el valor entero 1, pero está tratando de almacenar la cadena 'Correo electrónico' en su lugar, de ahí el error. No estoy seguro de por qué está haciendo eso ... – Chris
http://stackoverflow.com/questions/439003/how-do-you-map-an-enum-as-an-int-value-with-fluent- nhibernate – dotjoe
o http://stackoverflow.com/questions/1483044/mapping-enum-with-fluent-nhibernate –