Я пытаюсь сделать то, что кажется простым запросом для числа Products
, создаваемого каждым Manufacturer
, но NHibernate не генерирует T-SQL, который MS SQL Server находит действительным.
session.Query<Product>()
.GroupBy(p => p.Manufacturer)
.Select(grp => new {Mftr = grp.Key.Name, ProductCount = grp.Count()})
.ToList();
Это кажется очень простым, но оператор SQL, который NHibernate генерирует , не включает в себя все необходимые имена столбцов , поэтому он не работает при работе с базой данных SQL Server 2008 или SQL Server CE. Если я указываю тот же код на базу данных SQLite в памяти, он работает нормально.
Дополнительная информация приведена ниже, и я также создал небольшое консольное приложение, которое демонстрирует мою проблему . Как мне исправить эту проблему?
Сгенерированный SQL
select manufactur1_.Id,
cast(count(*) as INT),
manufactur1_.Id,
manufactur1_.Name
from "Product" product0_
left outer join "Manufacturer" manufactur1_
on product0_.Manufacturer_id=manufactur1_.Id
group by manufactur1_.Id -- Where's manufactur1_.Name?
Сущность
public class Product {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
}
public class Manufacturer {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
FNH Mappings
public class ProductMap : ClassMap<Product> {
public ProductMap() {
Id(x => x.Id).GeneratedBy.HiLo("1");
Map(x => x.Name);
References(x => x.Manufacturer).Cascade.SaveUpdate().Not.Nullable();
}
}
public class ManufacturerMap : ClassMap<Manufacturer> {
public ManufacturerMap() {
Id(x => x.Id) .GeneratedBy.HiLo("1");
Map(x => x.Name);
}
}