Vì vậy, như đã đề cập, việc lấy phiên bản Fluent NHibernate mới nhất ra khỏi cốp xe đã đưa tôi đến nơi tôi cần đến. Một ví dụ về ánh xạ cho một enum với mã mới nhất là:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Kiểu tùy chỉnh buộc nó phải được xử lý như một thể hiện của enum thay vì sử dụng GenericEnumMapper<TEnum>
.
Tôi thực sự đang xem xét việc gửi một bản vá để có thể thay đổi giữa một trình ánh xạ enum tồn tại một chuỗi và một trình liên kết duy trì một int vì có vẻ như một thứ mà bạn có thể đặt làm quy ước.
Điều này xuất hiện trên hoạt động gần đây của tôi và mọi thứ đã thay đổi trong các phiên bản mới hơn của Fluent NHibernate để làm cho việc này dễ dàng hơn.
Để làm cho tất cả các enum được ánh xạ dưới dạng số nguyên, bây giờ bạn có thể tạo một quy ước như sau:
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;
}
}
Sau đó, ánh xạ của bạn chỉ phải là:
Map(quote => quote.Status);
Bạn thêm quy ước vào ánh xạ Fluent NHibernate của mình như vậy;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
./* other configuration */