2010-05-19 114 views
0

我是新来NHibernate和需要关于发动机的内部工作的一些信息:NHibernate的查询对象集合问题

我有一个叫学生表和设计如下:

RollNo 
Name 
City 
Postcode 

和还有5个像这样的列。我有学校班级和与之相关的映射。

我使用的会话查询RollNo和名称如下:

IQuery query = session.CreateQuery("SELECT RollNo,Name FROM Student); 

执行query.List导致错误,因为该查询返回的对象[] []。现在

,我改变了查询,如下所示:

IQuery query = session.CreateQuery("FROM Student); 

此查询执行query.List yeilds所期望的结果。但是,结果包含的数据比我想要的要多。

可否请你让我知道了查询,我可以从学生获得RollNo和名称,浇注料为学生集合。

感谢, 马赫什

回答

1

我认为你可能会混淆查询数据库的列和查询对象。当您为您指定的代表学生的学生对象设置映射时,它必须包含某些属性。当您基于该对象进行查询时,您将返回指定为学生属性的任何映射。

说了这么多,可以查询数据库,唯一需要的数据恢复到一个新的对象。

//Domain Object 
public class StudentLite 
{ 

    public StudentLite(int rollNo, string name) 
    { 
    this.RollNo = rollNo; 
    this.StudentName = name; 
    } 
    public virtual int RollNo {get; set} 
    public virtual string StudentName {get; set;} 
} 

//DataAccess Layer 
IList<StudentLite> = Session.CreateQuery("SELECT new StudentLite(RollNo,Name) FROM Student").List<StudentLite>(); 

我想这将有可能提供学生一个Constructor对象,类似于这里的构造和学生对象做同样的事情。 我用这种方法看到的问题是,您可能会尝试使用学生对象,当它没有完全水合,并尝试访问其他属性,如城市和邮政编码,并获得意想不到的结果。