4

我有一个基本的 Customer/Order/OrderItem/Product 对象图。客户有很多订单,订单有很多订单项目,产品有很多订单项目。这些是使用 FNH 成功映射的。

我在配置存储过程和 fluent-nhibernate 时遇到了麻烦。在 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 映射是否可行?

提前致谢!

4

1 回答 1

6

好的,所以经过更多调查。我需要域类的映射以及命名查询 hbm.xml 文件。

在我的配置类中,我有

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

唯一不足的是需要手动为存储过程创建xml映射,目前无法使用FNH

于 2009-10-28T17:36:59.807 回答