2009-10-28 9 views
3

기본적인 Customer/Order/OrderItem/Product 객체 그래프가 있습니다. 고객은 많은 주문을 가지고 있고, 주문은 많은 주문 품목을 가지고 있으며, 제품은 많은 주문 품목을 가지고 있습니다. FNH를 사용하여 성공적으로 매핑됩니다.Fluent NHibernate and Stored Procedures

나는 저장 프로 시저 & 유창한 nhibernate를 구성하여 걸림돌을 때렸다. 유창한 최대 절전 모드 FNH (버전 1.0 RTM)의 저장 프로 시저를 매핑하는 고유 한 방법은 없습니다. 클래스 매핑에 파트를 추가하는 것에 대한 해결책은 here 이었지만 AddPart 호출은 FNH의 릴리스에서 가져 왔습니다.

저장 프로 시저는 간단하다, 때 시도하지만

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); 
     } 
    } 
} 

: 여기

<?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.hbm.xml가 CustomerOrderSummary 클래스 데프가되어있어

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 

NH 세션을 시작하려면 다른 세부 사항없이 명명 된 쿼리 OrderSummary에 오류가 발생합니다.

나는 아마도 CustomerOrderSummary 클래스를 프로 시저에 매핑하는 매우 간단한 것이 빠져있을 것입니다. 잘 모르겠습니다. 그 도메인 객체는 분명히 데이터베이스의 테이블에 직접 매핑되지 않기 때문에 정상적인 <class /> HBM 매핑이 작동하는지 확실하지 않습니다.

미리 감사드립니다.

+0

를 포맷하십시오 수동으로 내가 현재 시간에 FNH를 사용할 수있는 저장 프로 시저에 대한 XML 매핑을 만들 필요가있다이 코드 –

+0

코드를 포맷했는데 미리보기에서 확인되었습니다. 게시물에 fubared되었습니다. 가장 성가신. –

답변

5

확인 후 조금 더 조사합니다. 명명 된 쿼리 hbm.xml 파일뿐 아니라 도메인 클래스에 대한 매핑이 필요했습니다. 내 구성 클래스에서

내가

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

유일한 단점은 내가