gpt4 book ai didi

nhibernate - 流畅的 NHibernate 和存储过程

转载 作者:行者123 更新时间:2023-12-04 01:19:47 27 4
gpt4 key购买 nike

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

我在配置存储过程和 fluent-nhibernate 时遇到了障碍。在 fluent-hibernate FNH(版本 1.0 RTM)中没有映射存储过程的 native 方法。有一个解决方案 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 session 时,我在命名查询中遇到错误 OrderSummary没有其他细节。

我可能遗漏了一些非常简单的东西来映射 CustomerOrderSummary类到程序,我不知道。该域对象显然没有直接映射到数据库中的表,所以我不确定是否有正常的 <class /> HBM 映射会起作用吗?

提前致谢!

最佳答案

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

在我的配置类中,我有

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

唯一的缺点是需要手动为存储过程创建xml映射,目前还不能使用FNH

关于nhibernate - 流畅的 NHibernate 和存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1637862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com