2011-03-29 16 views
9

için Nhibernate sorgu dönüşüm ı özelliklerinde ID, Name, Age, Organisation ve Designation ile EmployeeEntity denilen basit bir varlık varken.Hata jenerik listeye

yürütülemedi sorgusu [SQL: mevcut değil SQL]

Sadece sorgu
IQuery query = session.CreateQuery(
    "select Name, Designation, Age, Organisation FROM EmployeeEntity " + 
    "group by Name, Designation, Age, Organisation"); 

IList<EmployeeEntity> employee = query.List<EmployeeEntity>(); // Throws error 

ama benim türüne dönüşüm

kullanarak veritabanı sorgulama ediyorum, istisna atıyor

InnerException ile:

değeri "System.Object []" türü değil "NHiberna teTest.EmployeeEntity "ve bu genel koleksiyonda kullanılamaz.
Parametre adı: değer

bu sorguyu kullanarak çalışıyor olsa:

IQuery query = session.CreateQuery("select e FROM EmployeeEntity e group by e"); 

IList<EmployeeEntity> employee = query.List<EmployeeEntity>(); 

ama ben onlara ihtiyacım yok çünkü tüm sütunları seçmek istemiyorum.

cevap

4

select Name, Designation, Age, Organisation... ile sorgularken, NHibernate aslında bir IList<object[]> örneğini döndürecektir. Bunu aşmak için, HQL'nizi select new EmployeeEntity(Name, Designation, Age, Organisation)...'a yeniden yazmayı deneyin ve EmployeeEntity sınıfına uygun bir kurucu ekleyin.

+0

Merhaba bir sonuç trafo eklemem gerekiyor, cevap için ancak ekleyerek yapıcı ve daha teşekkür querying..it bana bu durum "NHibernate verir .InvalidProxyTypeException: Aşağıdaki türler proxy'ler olarak kullanılamaz: NHibernateTest.EmployeeEntity: türünde, görünür bir (genel veya korumalı) no-argüman kurucusu " olmalıdır. Bu, kuruculu bir varlığın nhibernate tarafından desteklenmediği anlamına gelir. –

+0

@pijush, sadece parametrik olmayan bir kurucuya sahip olamayacağınız anlamına gelir. Basit bir şekilde parametrik olmayan bir kurucu ekleyin ve gitmekte fayda var. – Vadim

11

Yalnızca belirli bir sütun kümesini istiyorsanız, sütunlarınızla birebir eşlenen bir sınıf oluşturun. böylece gibi:

public class EmployeeView 
{ 
    public string Name { get; set; } 
    public string Designation { get; set; } 
    public int Age { get; set; } 
    public string Organization { get; set; } 
} 

Ardından sadece sorgunun

IQuery query = session 
    .CreateQuery("select Name ,Designation ,Age ,Organisation FROM EmployeeEntity group by Name ,Designation ,Age ,Organisation") 
    .SetResultTransformer(Transformers.AliasToBean<EmployeeView>()); 

Ilist<EmployeeEntity> employee= query.List<EmployeeView>(); 
+0

Merhaba Vadim, Cevabınız için teşekkür ederiz. Tüm tablonun her birinden birkaç sütun seçtiğimde farklı bir sınıf yaptığımı söylemek ister misiniz? Öyleyse derslerim seçime göre büyüyecek. –

+0

@pijush, oldukça yaygın bir uygulamadır, iyi bir tartışma için buraya bakın http://stackoverflow.com/questions/4636769/using-dtos-and-bos – Vadim

+0

Yardımlarınız için teşekkürler .. Sanırım devam edebilirim Suggession. –