Отже, як уже згадувалося, випуск останньої версії 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);
Ви додаєте конвенцію до свого відображення вільного NHibernate таким чином;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
.