Tak więc, jak wspomniano, pobranie najnowszej wersji Fluent NHibernate z bagażnika doprowadziło mnie do miejsca, w którym musiałem być. Przykładowe mapowanie wyliczenia z najnowszym kodem to:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Typ niestandardowy wymusza obsługę jako wystąpienie wyliczenia, a nie używanie GenericEnumMapper<TEnum>
.
Właściwie rozważam przesłanie poprawki, aby móc zmieniać między maperem wyliczenia, który utrzymuje ciąg znaków, a takim, który utrzymuje int, ponieważ wydaje się, że jest to coś, co powinno być w stanie ustawić jako konwencję.
Pojawiło się to podczas mojej ostatniej aktywności i wiele się zmieniło w nowszych wersjach Fluent NHibernate, aby to ułatwić.
Aby zmapować wszystkie wyliczenia jako liczby całkowite, możesz teraz utworzyć taką konwencję:
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;
}
}
Wtedy twoje mapowanie musi być tylko:
Map(quote => quote.Status);
Dodajesz konwencję do mapowania Fluent NHibernate w ten sposób;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
.