使用NHibernate存储枚举的推荐方式是什么?使用NHibernate枚举
换句话说,我应该在模型的属性中使用Enum类型吗?它是ID(int)?或者一个字符串?
我想从流利的NHibernate角度来了解。
使用NHibernate存储枚举的推荐方式是什么?使用NHibernate枚举
换句话说,我应该在模型的属性中使用Enum类型吗?它是ID(int)?或者一个字符串?
我想从流利的NHibernate角度来了解。
我们不得不在最近的工作中处理这个问题。
我们使用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);
在数据库中,该字段是一个整数
有趣。我猜你在向枚举中添加新成员时必须小心吗? (关于id同步问题) – UpTheCreek 2010-05-07 12:24:27
只要确保手动指定你的枚举值,你应该没有问题... – 2010-05-07 12:46:55
这是否也适用于数据库中的字符串? – 2011-08-17 15:51:34
最常见的情况是将它们存储为数值。你不需要做任何特殊的事情,只需映射属性即可。
有些人喜欢将它存储为字符串(C#中定义的值的名称)。有这样的用户类型。请参阅this blog。我认为,GenericEnumMapper
现在是NH的一部分。
有一个常见的问题,如何枚举值可以存储在自己的表中定义一个外键。 NH开箱即可。恕我直言,没有必要存储价值的数据库实际上已经定义(硬编码常量)在您的代码。
谢谢。你能给我更多关于你提到的用户类型的信息吗? – UpTheCreek 2010-05-07 12:22:19
我添加了一个链接。 – 2010-05-07 13:56:48