Bu yüzden, belirtildiği gibi, Fluent NHibernate'in en son sürümünü bagajdan çıkarmak beni olmam gereken yere getirdi. En son koda sahip bir enum için örnek bir eşleme şöyledir:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Özel tür, onu .kullanmak yerine numaralandırmanın bir örneği olarak ele alınmaya zorlar GenericEnumMapper<TEnum>
.
Aslında, bir dizgeyi sürdüren bir enum eşleştiricisi ile bir kural olarak ayarlayabilmeniz gereken bir şey gibi görünen bir int olarak devam eden bir eşleştirici arasında değişiklik yapabilmek için bir yama göndermeyi düşünüyorum.
Bu, son faaliyetimde ortaya çıktı ve bunu kolaylaştırmak için Fluent NHibernate'in yeni sürümlerinde işler değişti.
Tüm numaralandırmaların tamsayı olarak eşlenmesini sağlamak için artık aşağıdaki gibi bir kural oluşturabilirsiniz:
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;
}
}
O zaman eşlemeniz yalnızca şöyle olmalıdır:
Map(quote => quote.Status);
Konvansiyonu Fluent NHibernate haritanıza böyle eklersiniz;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
.