我有一个约定UserTypeConvention<MyUserType>
,MyUserType : IUserType
其中MyUserType
处理枚举类型MyEnum
。我已经配置了Fluent NHibernate
sessionFactory = Fluently
.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(
c => c.Is(connectionString))
)
.Mappings(
m => m
.FluentMappings
.AddFromAssemblyOf<A>()
.Conventions
.AddFromAssemblyOf<A>()
)
.BuildSessionFactory();
其中A
是与UserTypeConvention<MyUserType>
和MyUserType
相同的程序集中的类型。但是,Fluent NHibernate没有将MyUserType
应用于我的域对象上的MyEnum
类型的属性。相反,它正在将FluentNHibernate.Mapping.GenericEnumMapper<MyEnumType>
应用于这些属性。
发生了什么事?
答案 0 :(得分:1)
现在我用以下方法解决了这个问题:
public class MyEnumUserTypeConvention : UserTypeConvention<MyEnumUserType> {
public override void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) {
// Fluent NHibernate is too eager in applying GenericEnumMapper
// so our criteria is that it is already applied this type
criteria.Expect(x => x.Type == typeof(GenericEnumMapper<MyEnum>));
}
public override void Apply(IPropertyInstance instance) {
// we override Fluent NHibernate's application of GenericEnumMapper
instance.CustomType<MyEnumUserType>();
}
}
我认为这应该是完全没必要的。如果有人告诉我这是Fluent NHibernate的一个错误,那就没事了。如果有人给了我一个很好的理由,为什么Fluent NHibernate应该如此渴望应用GenericEnumMapper
,这也是可以接受的。
答案 1 :(得分:0)
好的我尝试了以下内容,我认为它适合您:
public class MyEnumUserTypeConvention : UserTypeConvention<MyEnumUserType>
{
public override void Accept(FluentNHibernate.Conventions.AcceptanceCriteria.IAcceptanceCriteria<FluentNHibernate.Conventions.Inspections.IPropertyInspector> criteria)
{
///Do nothing
}
}