C# 规范化NHibernate中的EnumStringType
我目前正在使用NHibernate中的枚举,映射如下C# 规范化NHibernate中的EnumStringType,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,我目前正在使用NHibernate中的枚举,映射如下 public enum UploadMethod { Java, Silverlight, Gears, Flash } class UploadMethodType : EnumStringType { public UploadMethodType() : base(typeof(UploadMethod), 255) { } } public class Person { /* Bunch of non in
public enum UploadMethod
{
Java, Silverlight, Gears, Flash
}
class UploadMethodType : EnumStringType
{
public UploadMethodType() : base(typeof(UploadMethod), 255) { }
}
public class Person
{
/* Bunch of non interesting properties... */
public UploadMethod PreferredUploadMethod { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Person" lazy="false" table="[dbo].[People]">
<!-- Bunch of non interesting properties... -->
<property name="PreferredUploadMethod" type="UploadMethodType" />
</class>
</hibernate-mapping>
公共枚举上载方法
{
Java、Silverlight、Gears、Flash
}
类UploadMethodType:EnumStringType
{
public UploadMethodType():base(typeof(UploadMethod),255){
}
公共阶层人士
{
/*一堆不感兴趣的属性*/
公共UploadMethod PreferredUploadMethod{get;set;}
}
除了数据库远未规范化之外,People表中的每一行都有一个包含四个文本字符串之一的列。我现在已经将其分离到一个新表中,但我不确定如何在NHibernate中创建映射。我的第一反应是
,但我不想让这个枚举成为它自己的实体,我基本上只需要NHibernate做一个简单的连接来固定额外的列
作为权宜之计,我刚刚创建了一个视图,它工作得很好,但我更希望抽象层在我的NHibernate映射中,而不是模式中。如果我理解正确,您的数据库是完全规范化的。您告诉NHibernate将枚举存储为字符串,这是一件好事。枚举不是一个实体。它的定义不应存储在数据库中,因为它是在C#中定义的 如果删除EnumStringType并将enum映射为Int32,则会得到一个数字。对您来说,这可能看起来更“规范化”,但当您更改枚举并且必须处理遗留数据库时,这是一个潜在的问题