2011-04-05 46 views
2

枚舉類型屬於組合鍵屬性的映射似乎已經從int更改爲字符串,並且無法將其更改回來。複合id中的枚舉 - 流利NHibernate 1.2

我有了這個數據類:

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); 
    } 
} 

在數據庫中的 「級別」 列是一個整數。

這用於工作,但對於他的Fluent版本,它嘗試將字符串「Hi」和「Lo」寫入級別列。

如何強制它映射到一個整數?

回答

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.祝您好運,並且可能您的所有數據庫不總是「遺留」!

+0

這兩個建議工作正常。謝謝你的幫助。你不會相信我們的數據庫有多「傳統」! – Nick 2011-04-06 12:11:05

+0

難道你不能用公約來做這件事嗎? – BradLaney 2012-01-04 17:06:39

4

最簡單的方法正好被設置鍵入關鍵屬性:

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

FNH映射始終枚舉作爲默認字符串。相反,在FNH1.0中,composite-id中的enum默認映射爲int。可能是changed爲了解決更高版本中的這種不一致問題。

+0

難道你不能用這個約定來做這件事嗎? – BradLaney 2012-01-04 17:06:32