ดังที่ได้กล่าวไปแล้วการได้ Fluent NHibernate เวอร์ชันล่าสุดออกจากลำตัวทำให้ฉันไปถึงที่ที่ฉันต้องการ ตัวอย่างการแมป enum ด้วยรหัสล่าสุดคือ:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
ประเภทที่กำหนดเองบังคับให้จัดการเป็นอินสแตนซ์ของ enum แทนที่จะใช้GenericEnumMapper<TEnum>
.
ฉันกำลังพิจารณาที่จะส่งแพตช์เพื่อให้สามารถเปลี่ยนระหว่าง enum mapper ที่ยังคงมีสตริงและอันที่ยังคงมี int อยู่เนื่องจากดูเหมือนว่าคุณควรจะตั้งค่าเป็นแบบแผนได้
สิ่งนี้เกิดขึ้นจากกิจกรรมล่าสุดของฉันและสิ่งต่างๆได้เปลี่ยนแปลงไปใน Fluent NHibernate เวอร์ชันใหม่กว่าเพื่อให้ง่ายขึ้น
ในการทำให้ enums ทั้งหมดถูกแมปเป็นจำนวนเต็มคุณสามารถสร้างการประชุมได้ดังนี้:
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>();
})
.