Wie bereits erwähnt, brachte mich die neueste Version von Fluent NHibernate aus dem Kofferraum, wo ich sein musste. Eine Beispielzuordnung für eine Aufzählung mit dem neuesten Code lautet:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Der benutzerdefinierte Typ erzwingt, dass er als Instanz der Aufzählung behandelt wird, anstatt die zu verwenden GenericEnumMapper<TEnum>
.
Ich denke tatsächlich darüber nach, einen Patch einzureichen, um zwischen einem Enum-Mapper, der eine Zeichenfolge beibehält, und einem, der ein Int beibehält, wechseln zu können, da dies etwas zu sein scheint, das Sie als Konvention festlegen sollten.
Dies tauchte in meiner letzten Aktivität auf und in den neueren Versionen von Fluent NHibernate haben sich die Dinge geändert, um dies zu vereinfachen.
Um alle Aufzählungen als Ganzzahlen zuzuordnen, können Sie jetzt eine Konvention wie folgt erstellen:
public class EnumConvention : IUserTypeConvention
{
public bool Accept(IProperty target)
{
return target.PropertyType.IsEnum;
}
public void Apply(IProperty target)
{
target.CustomTypeIs(target.PropertyType);
}
public bool Accept(Type type)
{
return type.IsEnum;
}
}
Dann muss Ihr Mapping nur noch sein:
Map(quote => quote.Status);
Sie fügen die Konvention wie folgt zu Ihrer Fluent NHibernate-Zuordnung hinzu.
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
./* other configuration */