首页 文章

使用Fluent NHibernate和NHibernate 3将Enum作为Int映射

提问于
浏览
23

我过去使用这个How do you map an enum as an int value with fluent NHibernate?来映射,但我似乎已经工作了 . 我've put breakpoints in my EnumConvention class and they'没有被击中 . 命中数据库的查询将枚举作为字符串,这是默认配置 .

这如何与NHibernate 3一起使用?

Update

以下是生成的映射文件的一部分:

<property name="ComponentType" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[...ComponentType, ..., Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.1.0.0, Culture=neutral, PublicKeyToken=8aa435e3cb308880">
  <column name="ComponentTypeId" />
</property>

当为枚举指定 IUserTypeConvention 时,它将使用 GenericEnumMapper 似乎不正确 .

这是我的惯例:

public class EnumConvention : IUserTypeConvention
{
    public void Accept( IAcceptanceCriteria<IPropertyInspector> criteria )
    {
        criteria.Expect( e => e.Property.PropertyType.IsEnum );
    }

    public void Apply( IPropertyInstance instance )
    {
        instance.CustomType( instance.Property.PropertyType );
    }
}

3 回答

  • 0

    简单地做 Map( m => m.MyEnum ).CustomType<MyEnum>() 似乎现在工作得很好 .

    如果有人知道为什么 IUserTypeConvention 仍然不知道为什么 . 也许它_111276_它从lib中删除了吗?

  • 1

    您应该继承您的约定而不是来自IUserTypeConvention,而是来自FluentNHibernate.Conventions.UserTypeConvention .

    例如,这是我用来将布尔值和可空布尔值映射到名为 UserTrueFalseType 的自定义类型的确切约定:

    /// <summary>
    /// Convention: Boolean fields map to CHAR(1) T/F/Null
    /// </summary>
    public class BooleanTrueFalseConvention : FluentNHibernate.Conventions.UserTypeConvention<UserTrueFalseType>
    {
        /// <summary>
        /// Accept field type criteria
        /// </summary>
        /// <param name="criteria"></param>
        public override void Accept(FluentNHibernate.Conventions.AcceptanceCriteria.IAcceptanceCriteria<FluentNHibernate.Conventions.Inspections.IPropertyInspector> criteria)
        {
            criteria.Expect(instance =>
                instance.Property.PropertyType.Equals(typeof(System.Boolean))
                ||
                instance.Property.PropertyType.Equals(typeof(System.Nullable<System.Boolean>))
            );
        }
    }
    

    这适用于NH 3.3和Fluent的最新版本 .

  • 43

    我遇到了与Nhibernate 3.0GA和FluentNh类似的问题(用最新的NH版本重建) . UserTypeConventions未正确注册 .

    这里描述的问题:http://groups.google.com/group/nhusers/browse_thread/thread/c48da661f78bfad0

相关问题