2013-09-26 87 views
0

我有一個數據庫(不能改變)與值的整個負載存儲在兩列:NHibernate的 - 地圖多個數據庫列一個對象

目前每列映射到一個屬性,我的域名物體看起來是這樣的:

int? Value1 
bool IsValue1RealValue 

string Value2 
bool IsValue2RealValue 

bool? Value3 
bool IsValue3RealValue 

我希望把這些成值類型將舉行2個或3個值:

-The值(存儲在objectT
-The布爾 'RealValue'
- 和(可選地)在.NET屬性名

目前的名稱我有以下NHibernate的映射:

Component(x => x.Value1, fdf => 
    { 
    fdf.Map(f => f.Value).Column("Value1"); 
    fdf.Map(f => f.IsRealValue).Column("IsValue1RealValue"); 
    }); 

Value1具有以下類型:

public class FlaggedNullableIntValue 
{ 
    public int? Value; 
    public bool IsRealValue; 
} 

我的域對象會再看看這樣的:

public class DomainEntity 
{ 
    public virtual FlaggedNullableIntValue Value1; 
    public virtual FlaggedStringValue Value2; 
    public virtual FlaggedNullableBooleanValue Value3; 
} 

我想知道在這條路上走得更遠還是有另一個更適合我需要的構造是個好主意?

+0

我不認爲我理解。你希望你的模型看起來像什麼?如果'Value'的類型是'int?',那麼有'T'或'objects'的地方?你想要映射哪個屬性名稱? – NOtherDev

+0

我已更新我的問題。該模型對於數據庫中的每個Value + IsRealValue組合都有1個屬性。該值目前仍然是int,但理想情況下,映射對象將能夠將Type,bool和String作爲Type for Value來處理。 – Laoujin

+0

您是否問nHibernate是否具有轉換行(對象)中的列的功能?如果是這樣,我很確定這是不可能的。你必須手動映射每一對。 – igelineau

回答

1

我認爲你是完全正確的軌道。一個建議 - 你應該能夠使你的類爲通用的,這樣你就不必創建很多不同的類。

public class FlaggedNullableValue<T> 
    where T : struct 
{ 
    public T? Value; 
    public bool IsRealValue; 
} 

它看起來像你使用流利的NHibernate指定你的映射。只要您對這些列對的命名方式一致,就應該能夠創建一個約定來減輕映射所有這些屬性和列名稱的負擔。

+0

我們結束了使用'ICompositeUserType'(根據您的評論)。迄今爲止,它運行得非常好。 – Laoujin

相關問題