流利的NHibernate和存储过程
-
08-07-2019 - |
题
我有一个基本的Customer / Order / OrderItem / Product对象图。客户有多个订单,订单有多个订单商品,产品有许多订单商品。这些都是使用FNH成功映射的。
我遇到了配置存储过程<!>放大器的问题。流利,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类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映射?
提前致谢!
解决方案
好的,经过多一点调查后。我需要域类的映射以及命名查询hbm.xml文件。
在我的配置类中,我有
config.Mappings(x =>
{
x.FluentMappings.AddFromAssemblyOf<CustomerMapping>().ExportTo(schemaPath);
x.HbmMappings.AddFromAssemblyOf<CustomerOrderSummary>();
});
唯一的缺点是我需要为存储过程手动创建xml映射,我当前不能使用FNH
不隶属于 StackOverflow