Итак, как уже упоминалось, получение последней версии Fluent NHibernate из багажника привело меня туда, где я должен был быть. Пример сопоставления для перечисления с последним кодом:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Пользовательский тип заставляет его обрабатываться как экземпляр перечисления, а не с помощью GenericEnumMapper<TEnum>
.
На самом деле я рассматриваю возможность отправки патча, чтобы можно было переключаться между перечислителем enum, в котором сохраняется строка, и тем, в котором сохраняется int, поскольку это выглядит как нечто, что вы должны установить в качестве соглашения.
Это всплыло в моей недавней активности, и в новых версиях Fluent NHibernate все изменилось, чтобы упростить эту задачу.
Чтобы все перечисления отображались как целые числа, теперь вы можете создать соглашение следующим образом:
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;
}
}
Тогда ваше отображение должно быть только:
Map(quote => quote.Status);
Вы добавляете соглашение в ваше отображение Fluent NHibernate следующим образом;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
./* other configuration */