Итак, как уже упоминалось, получение последней версии Fluent NHibernate из магистрали привело меня туда, где я должен был быть. Пример сопоставления перечисления с последним кодом:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Пользовательский тип заставляет его обрабатывать как экземпляр перечисления, а не использовать GenericEnumMapper<TEnum>
.
На самом деле я рассматриваю возможность отправки патча, чтобы иметь возможность переключаться между сопоставителем перечислений, который сохраняет строку, и тем, который сохраняет 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>();
})
.