4

基本的な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マッピングが機能するかどうかはわかりませんか?

前もって感謝します!

4

1 に答える 1

6

さて、もう少し調査した後。ドメインクラスのマッピングと名前付きクエリhbm.xmlファイルが必要でした。

私のconfigureクラスには

config.Mappings(x =>
{
    x.FluentMappings.AddFromAssemblyOf<CustomerMapping>().ExportTo(schemaPath);
    x.HbmMappings.AddFromAssemblyOf<CustomerOrderSummary>();
});

唯一の欠点は、ストアドプロシージャのxmlマッピングを手動で作成する必要があることです。現時点では、FNHを使用できません。

于 2009-10-28T17:36:59.807 に答える