我有惯例 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
    }
  }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top