基本的なCustomer/Order / OrderItem/Productオブジェクトグラフがあります。顧客には多くの注文があり、注文には多くの注文アイテムがあり、製品には多くの注文アイテムがあります。これらは、FNHを使用して正常にマッピングされます。
ストアドプロシージャと流暢なnhibernateの設定で問題が発生しました。流暢で休止状態のFNH(バージョン1.0 RTM)でストアドプロシージャをマッピングするネイティブな方法はありません。クラスマッピングにパーツを追加することについての解決策がここにありましたが、AddPart呼び出しはFNHのリリースから削除されました。
ストアドプロシージャは単純です。
CREATE PROCEDURE [dbo].[OrderCountByCustomer]
AS
BEGIN
SET NOCOUNT ON;
SELECT
c.name as [Customer.Name],
CAST(count(o.id) as NVARCHAR) as [Customer.OrderCount]
FROM customer c
LEFT OUTER JOIN [order] o
ON o.customer_id = c.id
GROUP BY c.name
END
にCustomerOrderSummary.hbm.xmlがあります
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NVAble.Orders.Core" namespace="NVAble.Orders.Core">
<sql-query name="OrderSummary">
<return class="CustomerOrderSummary">
<return-property column="Customer.Name" name="CustomerName" />
<return-property column="Customer.OrderCount" name="OrderCount" />
</return>
EXEC [OrderCountByCustomer]
</sql-query>
</hibernate-mapping>
CustomerOrderSummaryクラスの定義は次のとおりです。
namespace NVAble.Orders.Core
{
public class CustomerOrderSummary
{
virtual public string CustomerName { get; set; }
virtual public string OrderCount { get; set; }
public override string ToString()
{
return string.Format("{0} {1}", CustomerName, OrderCount);
}
}
}
ただし、NHセッションを開始しようとすると、名前付きクエリOrderSummary
でエラーが発生し、他の詳細は表示されません。
クラスをプロシージャにマップする本当に単純なものが不足している可能性がCustomerOrderSummary
あります。わかりません。そのドメインオブジェクトは明らかにデータベース内のテーブルに直接マップされないため、通常の<class />
HBMマッピングが機能するかどうかはわかりませんか?
前もって感謝します!