Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Fluent NHibernate检索大型数据集_C#_Fluent Nhibernate - Fatal编程技术网

C# 使用Fluent NHibernate检索大型数据集

C# 使用Fluent NHibernate检索大型数据集,c#,fluent-nhibernate,C#,Fluent Nhibernate,我正在构建一个解决方案,从数据库中检索大量数据(5k到10k记录)。我们现有的数据访问层使用Fluent NHibernate,但我“害怕”通过水合表示数据库实体的对象模型会产生大量开销 我可以简单地检索ADO数据集吗?是的,您应该关心此数据集的性能。您可以查看如何使用NHibernate的IStatelessSession功能。然而,这可能不会给你的表现,你正在寻找。虽然我从2.1.2GA开始就没有使用过NH,但我会发现他们不太可能在批量操作方面大幅提高NH的性能。坦率地说,NH在批量操作方面

我正在构建一个解决方案,从数据库中检索大量数据(5k到10k记录)。我们现有的数据访问层使用Fluent NHibernate,但我“害怕”通过水合表示数据库实体的对象模型会产生大量开销


我可以简单地检索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)