Jadi, seperti yang disebutkan, mengeluarkan versi terbaru dari Fluent NHibernate dari bagasi membawa saya ke tempat yang saya inginkan. Contoh pemetaan enum dengan kode terbaru adalah:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Jenis kustom memaksanya untuk ditangani sebagai instance enum daripada menggunakan GenericEnumMapper<TEnum>
.
Saya benar-benar mempertimbangkan untuk mengirimkan tambalan untuk dapat mengubah antara pemeta enum yang mempertahankan string dan yang mempertahankan int karena itu tampak seperti sesuatu yang harus Anda atur sebagai konvensi.
Ini muncul di aktivitas saya baru-baru ini dan banyak hal telah berubah di Fluent NHibernate versi terbaru untuk membuatnya lebih mudah.
Untuk membuat semua enum dipetakan sebagai integer, Anda sekarang dapat membuat konvensi seperti ini:
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;
}
}
Maka pemetaan Anda hanya harus:
Map(quote => quote.Status);
Anda menambahkan konvensi ke pemetaan Fluent NHibernate seperti ini;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
.