Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 如何处理数据库中有数百万条记录的业务对象集合?_C#_Orm - Fatal编程技术网

C# 如何处理数据库中有数百万条记录的业务对象集合?

C# 如何处理数据库中有数百万条记录的业务对象集合?,c#,orm,C#,Orm,下面是一个场景 我有一份申请。基础数据库表有数百万行。假设表“Books”有数百万行 在应用程序设计中,我有一个定制的业务对象Book和定制的collectionBookCollection,来表示图书集合。我们已经编写了一个小型ORM,负责业务对象和数据集之间的映射。对象本身通过自定义属性修饰其属性来保存映射细节 现在,有一个场景,BookCollection对象需要保存数千条记录 采取什么样的最佳策略 在这里交易?我也可以装书吗 将对象放入BookCollection 间接地还是平行地?是什

下面是一个场景

我有一份申请。基础数据库表有数百万行。假设表“Books”有数百万行

在应用程序设计中,我有一个定制的业务对象Book和定制的collectionBookCollection,来表示图书集合。我们已经编写了一个小型ORM,负责业务对象和数据集之间的映射。对象本身通过自定义属性修饰其属性来保存映射细节

现在,有一个场景,BookCollection对象需要保存数千条记录

采取什么样的最佳策略 在这里交易?我也可以装书吗 将对象放入BookCollection 间接地还是平行地?是什么 这方面的建议做法 情景


根据需要,将它们全部加载到
列表
只读集合
。除非记录非常大(MBs),否则数千条记录不会造成问题

我通常会在一个查询中检索所有需要的记录,并以这种方式填充列表


我不太明白你在这里所说的战略是什么意思——最优是一个充满负担的术语(我的最优和你的最优可能非常不同)。以什么方式优化?

我的第一个问题是;为什么你需要成千上万的书来记忆。对于这一点,有一些有效的方案,但你只需要接受成本。但是对于大多数事情(搜索、过滤、排序、分页)等,您可以从数据库中获取您主动需要的数据页,而这些数据页通常没有那么多

即使您确实需要所有这些,也不一定同时需要它们-例如,您可以在类似
IDataReader
的内容上设置迭代器块(
yield return
),并且一次只处理一行。实际上,这并没有您想象的那么多开销,通常比缓冲大量数据更可取。如果您需要对流数据进行多个聚合(只读取一次),PushLinq可以为您提供帮助

在许多其他情况下,可以在数据库内进行聚合等操作;这是LINQ做得很好的事情之一——让您可以使用域模型中的对象模型在后端数据库中表示聚合


具体场景是什么?

收集线程安全吗?在内存中保存Book实例的开销是多少?从数据库中获取书籍数据的成本是多少?您是否更关心内存使用或性能?这些都是需要回答的问题,然后才能决定针对这种情况的最佳策略。