Oi pessoal, estou com esse problema, podem me ajudar? O problema a princípio e da query gerada não ter agrupamento dos campos de Id e Nome da categoria.
Column 'Categoria.Id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Column 'Categoria.Id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Source Error:
Line 55: IQuery query = session.CreateQuery(hql);
Line 56: query.SetResultTransformer(Transformers.AliasToBean<ProdutosPorCategoria>());
Line 57: return query.List<ProdutosPorCategoria>();
Line 58: }
Line 59: }
using LojaWeb.Entidades;
using LojaWeb.Models;
using NHibernate;
using NHibernate.Transform;
using System;
using System.Collections.Generic;
namespace LojaWeb.DAO
{
public class CategoriasDAO
{
private ISession session;
public CategoriasDAO(ISession session)
{
this.session = session;
}
public void Adiciona(Categoria categoria)
{
this.session.Save(categoria);
}
public void Remove(Categoria categoria)
{
}
public void Atualiza(Categoria categoria)
{
this.session.Merge(categoria);
}
public Categoria BuscaPorId(int id)
{
return session.Get<Categoria>(id);
}
public IList<Categoria> Lista()
{
return new List<Categoria>();
}
public IList<Categoria> BuscaPorNome(string nome)
{
string hql = "from Categoria c where c.Nome = :nome";
IQuery query = session.CreateQuery(hql);
query.SetParameter("nome", nome);
return query.List<Categoria>();
}
public IList<ProdutosPorCategoria> ListaNumeroDeProdutosPorCategoria()
{
string hql = "select p.Categoria as Categoria, count(p) as NumeroDeProdutos from Produto p group by p.Categoria";
IQuery query = session.CreateQuery(hql);
query.SetResultTransformer(Transformers.AliasToBean<ProdutosPorCategoria>());
return query.List<ProdutosPorCategoria>();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="LojaWeb" namespace="LojaWeb.Entidades">
<class name="Categoria">
<id name="Id">
<generator class="identity"/>
</id>
<property name="Nome"/>
<bag name="Produtos" inverse="true">
<key column="CategoriaId" />
<one-to-many class="Produto" />
</bag>
</class>
</hibernate-mapping>
using System.Collections.Generic;
namespace LojaWeb.Entidades
{
public class Categoria
{
public virtual int Id { get; set; }
public virtual string Nome { get; set; }
public virtual IList<Produto> Produtos { get; set; }
}
}