2010-05-07 97 views
3

使用NHibernate存储枚举的推荐方式是什么?使用NHibernate枚举

换句话说,我应该在模型的属性中使用Enum类型吗?它是ID(int)?或者一个字符串?

我想从流利的NHibernate角度来了解。

+0

我添加了一个链接。 – 2010-05-07 13:56:48

回答

4

我们不得不在最近的工作中处理这个问题。

我们使用FluentNhibernate,我们创造了这样一个约定:

public class EnumConvention : IPropertyConvention, IConventionAcceptance<IPropertyInspector> 
{ 
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) 
    { 
     criteria.Expect(x => x.Property.PropertyType.IsEnum); 
    } 

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

然后,你可以映射你的财产

Map(x => x.Enum); 

在数据库中,该字段是一个整数

+0

有趣。我猜你在向枚举中添加新成员时必须小心吗? (关于id同步问题) – UpTheCreek 2010-05-07 12:24:27

+0

只要确保手动指定你的枚举值,你应该没有问题... – 2010-05-07 12:46:55

+0

这是否也适用于数据库中的字符串? – 2011-08-17 15:51:34

2

最常见的情况是将它们存储为数值。你不需要做任何特殊的事情,只需映射属性即可。

有些人喜欢将它存储为字符串(C#中定义的值的名称)。有这样的用户类型。请参阅this blog。我认为,GenericEnumMapper现在是NH的一部分。

有一个常见的问题,如何枚举值可以存储在自己的表中定义一个外键。 NH开箱即可。恕我直言,没有必要存储价值的数据库实际上已经定义(硬编码常量)在您的代码。

+1

谢谢。你能给我更多关于你提到的用户类型的信息吗? – UpTheCreek 2010-05-07 12:22:19