Ich habe eine Klasse, die einen Enum-Typ hat, der angibt, ob der Nachrichtentyp E-Mail oder SMS ist. Der Enum-Typ ist definiert:
public enum ReminderType
{
Email = 1,
Sms = 2
}
Die Klasse, die diesen Typ verwendet, sieht wie folgt aus:
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;
}
}
Wenn ich versuche, eine Entität des Typs Erinnerung in der Datenbank aufrechtzuerhalten, erhalte ich jedoch den folgenden Fehler:
System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting the nvarchar value 'Email' to data type int.
Das hintere Feld ist vom Typ int
Ich bin mir also nicht sicher, warum NHibernate standardmäßig versucht, die String-Darstellung zuzuordnen. Ich verwende Fluent NHibernate, und der entsprechende Mapping-Code ist:
mappings.Override<Reminder>(map =>
{
map.Map(x => x.Type).Column("Type")
});
Ich bin mir ziemlich sicher, dass das Standardverhalten von NHibernate Enums als Ints abbildet, warum tut es das in diesem Fall nicht? Ich verwende SQL Server 2005, falls das eine Rolle spielt.