У меня есть базовый график объекта Customer / Order / OrderItem / Product. У клиента много заказов, у заказа много товаров, у товара много товаров. Они успешно сопоставлены с использованием FNH.
Я столкнулся с проблемой при настройке хранимой процедуры & fluent-nhibernate. Не существует встроенного способа сопоставления хранимых процедур в свободном спящем 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?
Заранее спасибо!