2009-04-21 10 views
2

をプロパティをマッピング私は主にテーブルBにマッピングされたクラスのプロパティにテーブルAの列をマッピング問題を抱えている以下では、この優れたについて説明します。流暢NHibernateのは、別のテーブルから

ありますCustomerRumberプロパティを持つクラスCustomerRisk。

データベースでは、これはCustomerNumberという列を持つCustomerとCustomerに外部キーを持ち、RiskRightに1つのCustomerRiskという2つのテーブルで構成されています。

リスクのマッピングは難しくありませんが、CustomerNumberのマッピングが問題です。 Customerクラス*を作成せずにこれを行うことは可能ですか? NHibernateのはCustomerNumberのを選択するために、Customerクラスに参加するように:

select cn.CustomerNumber, r.Description 
from CustomerRisk cr 
    inner join Customer c on c.CustomerID = cr.CustomerID 
    inner join Risk r on r.RiskID = cr.RiskID 

複数CustomerRiskレコードはもちろん、同じ得意先を持つことができます。

これをほのめかしていますが、ありがとうございます。

  • 通常、顧客クラスが必要だとは知っていますが、クラスを「匿名化」しました。
+0

Customerテーブルのクラスを作成することで解決しましたが、CustomerRiskにCustomerプロパティを隠していました(内部のため、Fluent NHはAssemblyInfoのInternalsVisibleToを介してアクセスできます)。 CustomerRisk.CustomerNumberプロパティは、内部CustomerプロパティのCustomerNumberプロパティを返します。 – Peter

答えて

0

NHibernateを使って作業するとき、エンティティを扱い、あなたがそれを(マッピングファイルを通して)伝えたことだけを知っていることを覚えておいてください。 HQLはオブジェクト指向のSQLバージョンであるため、マップされたドメインモデルの一部ではないフィールドにはアクセスできません。

あなたはORMにマップしていないデータに実際にアクセスする唯一の方法ですが、NHibernateセッションを通してプレーンな古いSQLを実行することはできます。軽量のマッピングソリューションがあるかもしれませんが(データモデルを見ることなく私は言うことはできませんが)、「顧客」を完全にマッピングしていない場合は、SQLが最善の策だと思います。

+0

これを変更したので、今度はCustomerオブジェクトをマッピングします。 – Peter