C# 使用Fluent NHibernate检索大型数据集
我正在构建一个解决方案,从数据库中检索大量数据(5k到10k记录)。我们现有的数据访问层使用Fluent NHibernate,但我“害怕”通过水合表示数据库实体的对象模型会产生大量开销C# 使用Fluent NHibernate检索大型数据集,c#,fluent-nhibernate,C#,Fluent Nhibernate,我正在构建一个解决方案,从数据库中检索大量数据(5k到10k记录)。我们现有的数据访问层使用Fluent NHibernate,但我“害怕”通过水合表示数据库实体的对象模型会产生大量开销 我可以简单地检索ADO数据集吗?是的,您应该关心此数据集的性能。您可以查看如何使用NHibernate的IStatelessSession功能。然而,这可能不会给你的表现,你正在寻找。虽然我从2.1.2GA开始就没有使用过NH,但我会发现他们不太可能在批量操作方面大幅提高NH的性能。坦率地说,NH在批量操作方面
我可以简单地检索ADO数据集吗?是的,您应该关心此数据集的性能。您可以查看如何使用NHibernate的IStatelessSession功能。然而,这可能不会给你的表现,你正在寻找。虽然我从2.1.2GA开始就没有使用过NH,但我会发现他们不太可能在批量操作方面大幅提高NH的性能。坦率地说,NH在批量操作方面很差劲(一般来说,大多数ORM都是如此) Q:我可以简单地检索ADO数据集吗 你当然可以。使用NHibernate并不意味着您不能新建ADO.NET连接并直接访问数据库
我讨厌数据表和数据集,这是一种罕见的情况,您可能需要考虑使用它们,而不是增加映射/创建与10K行数据相关联的对象的开销。
< P>可以使用“标量查询”,这实际上是本机SQL查询返回对象[]的列表(每行一个对象[]):NHibernate文档中的示例:根据您需要的性能,有几个选项。没有什么比使用sqldatareader更好的了,因为几乎每一个.NETORM实现背后都有sqldatareader。除了速度最快之外,如果不需要在查询后保存所有记录的列表,它还可以占用更少的内存 至于你对表现的担忧,5k-10k记录并没有那么高。我以前从nhibernate网站上查过上百万行,但很明显,记录并不是很大,而且只针对一个案例。如果你在一个高流量的网站上做这件事,那么当然,如果你遇到瓶颈,你必须提高效率。如果您考虑的是数据集,我建议您尝试一下,因为它仍然比数据集/表更有效,更方便
sess.CreateSQLQuery("SELECT * FROM CATS")
.AddScalar("ID", NHibernateUtil.Int64)
.AddScalar("NAME", NHibernateUtil.String)
.AddScalar("BIRTHDATE", NHibernateUtil.Date)