【发布时间】:2011-07-19 22:22:28
【问题描述】:
我过去使用此How do you map an enum as an int value with fluent NHibernate? 进行映射,但我最近升级到 NHibernate 3,这似乎不再起作用。我已经在我的 EnumConvention 类中放置了断点并且它们没有被击中。访问数据库的查询将枚举作为默认配置的字符串。
这如何与 NHibernate 3 一起工作?
更新
这是生成的映射文件的一部分:
<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 );
}
}
【问题讨论】:
-
我真的不知道你能从这个练习中获得什么,但它可能已经被删除了,因为他们认为需要保留它
-
我没有看到它消失的任何地方,它似乎不再起作用了。那还能怎么做呢?做
Map( ... ).CustomType<int>()不起作用。它会导致问题。我会尝试做一个自定义的 IUserType,看看现在是否可行。 -
我说你有什么理由将它存储为 int 而不是 enum
-
啊。它实际上是作为一个表在数据库中,因此枚举的 int 与表行的 id 对齐。该表是固定的,不能更改,所以我想为它使用一个枚举。
标签: nhibernate fluent-nhibernate nhibernate-mapping