为什么流利的nhibrenate忽略了我的惯例?
-
28-09-2019 - |
题
我有惯例 UserTypeConvention<MyUserType>
在哪里 MyUserType : IUserType
在哪里 MyUserType
处理枚举类型 MyEnum
. 。我已经配置了流利的nhibrenate
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
. 。但是,流利的nhibrenate不应用 MyUserType
到类型的属性 MyEnum
在我的域对象上。相反,它正在应用 FluentNHibernate.Mapping.GenericEnumMapper<MyEnumType>
这些属性。
到底是怎么回事?
解决方案
目前,我已经解决了以下问题:
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>();
}
}
我认为这应该是完全不必要的。如果有人告诉我这是流利的nhibernate中的一个错误,那很好。如果有人给了我一个充分的理由,为什么应该流利的nhibrenate如此渴望申请 GenericEnumMapper
那也是可以接受的。
其他提示
好的,我尝试了以下操作,我认为它对您有用:
刚在肌拟及级别的级别中加入了接受方法,并且在其中什么也不做:
public class MyEnumUserTypeConvention : UserTypeConvention<MyEnumUserType>
{
public override void Accept(FluentNHibernate.Conventions.AcceptanceCriteria.IAcceptanceCriteria<FluentNHibernate.Conventions.Inspections.IPropertyInspector> criteria)
{
///Do nothing
}
}
不隶属于 StackOverflow