NHibernate fluente e procedimentos armazenados
Eu tenho um gráfico básico de objeto Customer / Order / OrderItem / Product. O cliente tem muitos pedidos, o pedido tem muitos itens de pedido, o produto tem muitos itens de pedido. Estes são mapeados com sucesso usando FNH.
Eu bati um obstáculo com a configuração de um procedimento armazenado e nhibernate fluente. Não há uma maneira nativa de mapear procedimentos armazenados em FNH fluente-hibernate (versão 1.0 RTM). Houve uma soluçãoAqui sobre como adicionar partes aos mapeamentos de classes, mas a chamada AddPart foi retirada do lançamento do FNH.
O procedimento armazenado é simples:
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
Há um CustomerOrderSummary.hbm.xml em
<?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>
Aqui está o def da classe 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);
}
}
}
No entanto, quando tentar iniciar uma sessão do NH, recebo erro na consulta nomeadaOrderSummary
sem outros detalhes.
Eu provavelmente estou sentindo falta de algo realmente simples que mapeieCustomerOrderSummary
classe para o procedimento, eu não sei. Esse objeto de domínio obviamente não mapeia diretamente para uma tabela na base de dados, então não tenho certeza se<class />
O mapeamento da HBM funcionaria?
Desde já, obrigado!