复合id中的枚举 - 流畅的NHibernate 1.2

时间:2011-04-05 14:22:32

标签: nhibernate key fluent composite enumerable

枚举类型的属性映射并且是复合键的一部分似乎已从int更改为string,并且无法将其更改回来。

我有这个数据类:

public class Table5
{
    public virtual int Value { get; set; }

    public virtual Level Level { get; set; }

    public virtual string Name { get; set; }

    // Equality operators omitted
}

public enum Level
{
    Hi,
    Lo
}

使用此映射:

public class Table5Map : ClassMap<Table5>
{
    public Table5Map()
    {
        Table("Table5");

        CompositeId()
            .KeyProperty(x => x.Value)
            .KeyProperty(x => x.Level);

        Map(x => x.Name);
    }
}

数据库中的“Level”列是一个整数。

这曾经有用,但是他的Fluent版本试图将字符串“Hi”和“Lo”写入Level列。

如何强制它映射到整数?

2 个答案:

答案 0 :(得分:4)

最简单的方法是为key属性设置Type:

CompositeId()
    .KeyProperty(x => x.Value)
    .KeyProperty(x => x.Level, m => m.Type(typeof(int)));

默认情况下,FNH映射始终枚举为字符串。相反,在FNH1.0中,复合id内的枚举默认映射到int。可能是changed以便在更高版本中修复这种不一致。

答案 1 :(得分:2)

尝试对映射进行此更改:

/// snip ///
 CompositeId()
    .KeyProperty(x => x.Value)
    .KeyProperty(x => x.Level, c => c.ColumnName("Level").Type(typeof(Level)));
/// snip ///

这个“技巧”对我来说必须处理具有许多复合键的遗留数据库。如果您需要非关键属性的等效“技巧”,look at the accepted answer here.祝您好运,并且您的所有数据库可能并不总是“遗留”!