2009-10-28 86 views
3

我有一個基本的Customer/Order/OrderItem/Product對象圖。客戶有許多訂單,訂單有很多訂單項目,產品有許多訂單項目。這些使用FNH成功映射。流利的NHibernate和存儲過程

我碰到了一個配置存儲過程的障礙& fluent-nhibernate。在流利休眠FNH(版本1.0 RTM)中映射存儲過程的方式不是本地方式。有一個解決方案here有關將部件添加到類映射的問題,但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 

有一個在

<?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類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會話,我在命名查詢OrderSummary中收到錯誤,但沒有其他詳細信息。

我可能會錯過一些非常簡單的東西,將CustomerOrderSummary類映射到過程,我不知道。該域對象顯然不直接映射到數據庫中的表,因此我不確定是否有正常的<class /> HBM映射可以工作?

在此先感謝!

+0

請格式化代碼 – 2009-10-28 15:13:29

+0

我確實格式化了代碼,在預覽中看起來不錯,在文章中放大了。最煩人的。 – 2009-11-03 16:22:38

回答

5

好的,所以經過多一點調查。我需要一個Domain Class的映射以及一個命名查詢hbm.xml文件。

在我的配置類,我有

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

唯一的缺點是,我需要手動創建XML映射存儲過程,我不能在當前時間使用FNH