Nhibernate只返回列有意义吗?

Nhibernate只返回列有意义吗?,nhibernate,Nhibernate,我想知道,既然nhibernate必须制作整个对象,那么这样做有意义吗 Session.Query<Table>().Where(x => x.Id == id).Select(x => x.ColumnA).FirstOrDefault(); Session.Query(); 还是这样做更好 Session.Query<Table>().Where(x => x.Id == id).FirstOrDefault(); Session.Query(

我想知道,既然nhibernate必须制作整个对象,那么这样做有意义吗

Session.Query<Table>().Where(x => x.Id == id).Select(x => x.ColumnA).FirstOrDefault();
Session.Query();
还是这样做更好

Session.Query<Table>().Where(x => x.Id == id).FirstOrDefault();
Session.Query().Where(x=>x.Id==Id.FirstOrDefault();
我试图决定是否应该在服务层中创建一个单独的方法,只返回ColumnA,并使用另一个方法返回所有字段

或者我应该像第二个示例那样使用一个方法返回所有字段

一方面,如果我使用第一种方法,那么从数据库返回的数据就会更少,尤其是当您知道只使用一列时。另一方面,如果我需要为每一列添加它,它会很糟糕

 Session.Query<Table>().Where(x => x.Id == id).Select(x => x.ColumnB).FirstOrDefault();
 Session.Query<Table>().Where(x => x.Id == id).Select(x => x.ColumnC).FirstOrDefault();
Session.Query().Where(x=>x.Id==Id).Select(x=>x.ColumnB.FirstOrDefault();
Session.Query().Where(x=>x.Id==Id).Select(x=>x.ColumnC.FirstOrDefault();

我认为ORM“NHibernate”的主要思想是提供使用全值对象(实体)的机会。如果您使用的查询只获取少数字段(而不是所有对象),则无法利用NHibernate的大部分优势是错误的。选择1个属性(或其中的一些属性)是一种投影。NHibernate确实支持投影,在许多情况下使用投影是有意义的

这取决于你想解决什么问题。如果您不知道存在问题,那么我非常建议不要使用投影来选择单个属性-使用实体更容易。但是,如果您面临一个真正的性能问题,那么您应该分析发生了什么以及瓶颈在哪里,如果在分析之后您发现这确实是因为您选择的是整个实体而不是它的单个属性,那么请务必使用投影

话虽如此,除非您的实体具有大量属性和/或大型数据,否则可能没有意义投影单个属性。此外,还会有一些轻微的性能损失,例如重复的查询计划