我有一个基本的客户/订单/订单项目/产品对象图。客户有很多订单,订单有很多订单项目,产品有很多订单项目。这些已使用 FNH 成功映射。
我在配置存储过程和 Fluent-nhibernate 时遇到了障碍。在 fluid-hibernate 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
有一个 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 映射可以工作吗?
提前致谢!