2012-05-04 11 views
1

私は所有者と呼ばれるNHibernateエンティティにSSN列とTaxID列を持っています。これらの2つの値のいずれかを条件付きでより一般的なプロパティ別のプロパティStructureTypeの値に基づいてOwnerエンティティでしたがって、StructureTypeが "I"の場合、SSN値を汎用プロパティにマップし、その "C"をTaxID値を汎用プロパティにマップしたいとします。これはFluent NHibernate(または通常のNHibernate)を使って可能ですか? Ownerエンティティは読み取り専用のエンティティです。何もデータベースに書き戻されません。条件付きで2つの列をFluent NHibernateで1つのフィールドにマップする

答えて

3

私は流暢NHibernateの中の式を使用してこの問題を解決することができた:

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

(私のオリジナルのポストでは、私はそれだけの間で「I」と「C」の間であったが、実際にあります'I'と他のすべてのタイプ)

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でFormulaを使ってこれを解くことができました: Map(x => x.Identification).Formula( "CASE WHEN StructureType = '私はSSN ELSE TaxIDを終了しました。 (私の元の記事では、私は「I」と「C」の間にあると言っていましたが、実際には「I」と他のすべてのタイプの間にあります) – JEGardner

関連する問題