流利的NHibernate - 如何映射List <enum>?

hol*_*gac 10 .net nhibernate fluent

我有一个类,里面有一个字符串和一个枚举器列表.

public enum SomeEnum
{
    Undefined=0,
    Enum1,
    Enum2,
    Enum3,
    End
}
public class SomeObject
{
    public virtual int ID{get; set;}
    public virtual String Name {get; set;}
    public virtual IList<SomeEnum> EnumList {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

现在,应该有一个SomeObjects列表,包含ID和Name.应该有另一张这样的地图:

5 2
5 3
3 1
9 3
Run Code Online (Sandbox Code Playgroud)

意思是,ID为5的玩家有Enum2和Enum3,另一个ID为3的玩家有Enum1,而ID为9的玩家有Enum3.他们说可以映射int,float等,但我不想在列表中创建IList.

有一种简单的方法可以让流利的nhibernate这样做吗?

HasMany(x => x.EnumList )
    .Cascade.All()
    .Table("ObjectEnumTable");
Run Code Online (Sandbox Code Playgroud)

此映射文件抛出异常并说"关联引用未映射的类:SomeEnum".

提前致谢.

Sta*_*t99 13

你最好将你的枚举值列表存储为直接的Flags枚举值,但如果你绝对必须有一个枚举列表(你需要支持重复或遗留数据库),那么你的映射应该是这样的:

HasMany(x => x.EnumList )
    .Cascade.All()
    .Table("ObjectEnumTable")
    .Element("EnumValueColumn");
Run Code Online (Sandbox Code Playgroud)

关键是.Element()方法,您必须拥有任何非实体HasMany关系,包括字符串,整数等.这将为您提供引用您的父实体的ID列,以及一个EnumValueColumn列,其中包含每个实体的枚举值项目.