2012-05-04 55 views
1

我有一個名爲所有者的NHibernate實體,有一個SSN列和TaxID列在數據庫中,我想有條件地映射到一個更通用的屬性基於不同屬性值StructureType的Owner實體。因此,如果StructureType是「我」,我想將SSN值映射到通用屬性,如果它的「C」我想將TaxID值映射到通用屬性。這可能使用流利的NHibernate(或者甚至常規的NHibernate)? Owner實體是一個只讀實體,沒有任何內容會被寫回數據庫。有條件地映射兩列到一個字段與流利NHibernate

回答

3

我能解決這個使用流利的NHibernate的一個公式:

Map(x => x.Identification) 
.Formula("CASE WHEN StructureType = 'I' THEN SSN ELSE TaxID END"); 

(我在原來的職位,我說,這是與「我」和「C」,但實際上只之間'我'和所有其他類型)

1

爲什麼不添加只讀屬性?

public string Identification 
{ 
    get 
    { 
     string identification = string.Empty; 
     if (StructureType.Equals("I")) 
      identification = SSN; 
     else if (StructureType.Equals("C")) 
      identification = TaxID; 
     return identification; 
    } 
} 
+0

這將工作,但我相信我已經找到了在NHibernate中這樣做的方式,我將在下面詳細介紹。 – JEGardner

+0

我能夠用Fluent NHibernate中的公式解決此問題: Map(x => x.Identification).Formula(「CASE WHEN StructureType ='I'Then SSN ELSE TaxID END」); (在我原來的文章中,我說它介於'I'和'C'之間,但實際上只是介於'I'和其他類型之間) – JEGardner