枚举类型的属性映射并且是复合键的一部分似乎已从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列。
如何强制它映射到整数?
答案 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.祝您好运,并且您的所有数据库可能并不总是“遗留”!