문제

기본 고객/Order/OrderItem/Product Object 그래프가 있습니다. 고객은 주문이 많고 주문 품목이 많으며 제품에는 많은 주문 항목이 있습니다. 이들은 FNH를 사용하여 성공적으로 매핑됩니다.

저장된 프로 시저 및 유창한 nibernate를 구성하여 걸림돌을 쳤다. Fluent-Hibernate FNH (버전 1.0 RTM)에 저장된 절차를 매핑하는 기본 방법은 없습니다. 해결책이있었습니다 여기 클래스 매핑에 부품을 추가하는 것에 대해 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 in이 있습니다

<?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 클래스 DEF입니다.

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 세션을 시작하려고하면 query의 쿼리에서 오류가 발생합니다. OrderSummary 다른 세부 사항이 없습니다.

나는 아마도 매핑하는 정말 간단한 것을 놓치고있을 것입니다 CustomerOrderSummary 절차에 대한 수업은 모르겠습니다. 해당 도메인 객체는 분명히 데이터베이스의 테이블에 직접 매핑되지 않으므로 정상인지 확실하지 않습니다. <class /> HBM 매핑이 작동합니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

좋아, 조금 더 조사한 후. 도메인 클래스에 대한 매핑과 이름이 지정된 쿼리 hbm.xml 파일이 필요했습니다.

내 구성 클래스에서 나는 가지고 있습니다

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

단점만이 저장된 프로 시저에 대한 XML 매핑을 수동으로 만들어야한다는 것입니다. 현재 시간에 FNH를 사용할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top