流NHなNHibernateおよびストアドプロシージャ
-
08-07-2019 - |
質問
基本的なCustomer / Order / OrderItem / Productオブジェクトグラフがあります。顧客には多くの注文があり、注文には多くの注文アイテムがあり、製品には多くの注文アイテムがあります。これらは、FNHを使用して正常にマッピングされます。
ストアドプロシージャ<!> amp;の構成で問題が発生しました。流nに眠る。 Fluent-Hibernate 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マッピングが機能するかどうかわかりません。
事前に感謝します!
解決
わかりました、もう少し調査した後。ドメインクラスのマッピングと名前付きクエリhbm.xmlファイルが必要でした。
私のconfigureクラスには
がありますconfig.Mappings(x =>
{
x.FluentMappings.AddFromAssemblyOf<CustomerMapping>().ExportTo(schemaPath);
x.HbmMappings.AddFromAssemblyOf<CustomerOrderSummary>();
});
唯一の欠点は、ストアドプロシージャのxmlマッピングを手動で作成する必要があることです。現在はFNHを使用できません