C# 规范化NHibernate中的EnumStringType

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

我目前正在使用NHibernate中的枚举,映射如下

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,则会得到一个数字。对您来说,这可能看起来更“规范化”,但当您更改枚举并且必须处理遗留数据库时,这是一个潜在的问题