Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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#_Database_Data Access Layer_Business Objects - Fatal编程技术网

C# 使用一个数据库调用加载业务对象层次结构

C# 使用一个数据库调用加载业务对象层次结构,c#,database,data-access-layer,business-objects,C#,Database,Data Access Layer,Business Objects,我想知道从单个数据库调用填充业务对象层次结构父/子/孙结构的最佳实践是什么 我可以想出几个方法来实现这一目标,比如: 左键连接sql语句中的所有关系,然后使用循环和逻辑填充业务对象 或 使用多个select语句和1个datareader,并使用其NextResult方法迭代每个结果集并填充相应的BO 只是想知道这方面的最佳实践是什么 我使用DAAB和c作为我的DAL 谢谢 DataReader NextResult是最好的,因为通过管道传输的数据量没有连接方法增长得那么快。我以前使用多个返回的数

我想知道从单个数据库调用填充业务对象层次结构父/子/孙结构的最佳实践是什么

我可以想出几个方法来实现这一目标,比如:

左键连接sql语句中的所有关系,然后使用循环和逻辑填充业务对象

使用多个select语句和1个datareader,并使用其NextResult方法迭代每个结果集并填充相应的BO

只是想知道这方面的最佳实践是什么

我使用DAAB和c作为我的DAL


谢谢

DataReader NextResult是最好的,因为通过管道传输的数据量没有连接方法增长得那么快。

我以前使用多个返回的数据集,但其开销和不断变化的API,最后让我回到仅使用连接一次返回所有数据集的方法

我一直关注结果集的大小,但在我遇到的任何应用程序的上下文中,这都不是问题。总的来说,我并不后悔这样做,但我很后悔

如果父级选择子句涉及子级选择规则,则多个结果集可能会异常频繁

这种方式处理所有案件;有时将其拆分是可行的,但在某些情况下,您最终将需要单集查询;只有一种模式是很好的,特别是当你有时不得不从一种模式重构到另一种模式时


最后,您对数据库的点击次数更少,事务管理也更简单。

没有通用的方法。它取决于数据库模式、数据库大小和应用程序在典型场景中读取的记录数。这里有两个过程:

从数据库获取数据 填充业务对象 从数据库中获取数据比在内存中创建对象慢几个数量级。最好的方法是构造select语句以实现最快的数据访问

可以通过三种方式构造查询:

一个在一次执行中获取所有内容的大型查询—您将得到最复杂的SQL,并且可能最快的执行取决于DB模式 主/详细方法-简单查询。大量的流量到数据库。只有在获取少量记录时,这才是可以接受的,否则速度会非常慢。 混合:层次结构的每一层都有一个查询。如果前面两种方法要慢,请考虑这种方法。这种方法需要更复杂的逻辑来填充业务对象。 你应该决定哪种解决方案是可以接受的。需要考虑的一些关键点:

哪种SQL更容易创建和维护?一个大的SQL在一次读取中获取所有内容,或者几个小的SQL。 当您在上一点上做出选择时,您应该衡量绩效并做出最终决定
您是否考虑过使用诸如NHibernate之类的或映射器?即时加载可以在一次对数据库的调用中完成所需的操作


如果不能选择或映射器,那么我会投datareader.NextResultSet的票

如果所有行都来自同一个表或看起来是,那么您可以将数据拉入具有一元关系的数据集中,ADO.NET将为您链接层次结构

您能澄清您的问题吗??您先讨论业务对象,然后讨论SQL。至少我感到困惑。