Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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#_.net_Data Access Layer - Fatal编程技术网

C# 关于将从数据存储获取的数据传递到业务层的建议

C# 关于将从数据存储获取的数据传递到业务层的建议,c#,.net,data-access-layer,C#,.net,Data Access Layer,我试图在.NET中开发一个数据访问层,具体来说是C#,不使用实体框架,只使用ADO.NET。在这种情况下,数据来自数据库 我想让数据处理逻辑远离数据存储查询逻辑。我正试图通过一个方法来完成所有查询,该方法接受一个SQLCommand,并管理与数据库相关的一次性对象。 我希望这个方法返回从查询中获得的数据,我可以返回Reader对象,但这意味着我必须关闭并处理调用方方法上的Reader及其连接,这正是我试图避免的。我提出的另一种选择是将每一行存储在以列名为键的字典中,并将字典列表返回给调用者,这将

我试图在.NET中开发一个数据访问层,具体来说是C#,不使用实体框架,只使用ADO.NET。在这种情况下,数据来自数据库

我想让数据处理逻辑远离数据存储查询逻辑。我正试图通过一个方法来完成所有查询,该方法接受一个SQLCommand,并管理与数据库相关的一次性对象。
我希望这个方法返回从查询中获得的数据,我可以返回Reader对象,但这意味着我必须关闭并处理调用方方法上的Reader及其连接,这正是我试图避免的。我提出的另一种选择是将每一行存储在以列名为键的字典中,并将字典列表返回给调用者,这将允许我关闭连接,但我不确定这是否是实现这一点的好方法。我想知道是否有更好的(合适的?)方法来实现这一点。

您目前使用的两种方法并不完美。将数据库读取器返回到业务层的第一种方法使数据层与业务层保持耦合。举个例子,假设有一天您决定使用nosql数据库,使用紧密耦合的体系结构将很难完成此任务

第二种方法很难管理

一种方法是在数据层上创建存储库。例如,如果您有一个employee表,那么您可以有一个employee存储库类,其中包含getEmployerByd(int-id)等方法。。。此存储库将返回强类型的employee(类)


在您的业务层中使用员工回购将很容易,如果有一天您希望将数据层切换到nosql之类的东西,那么业务层中的代码就不会关心getEmployerById方法下的哪些更改,只要它仍然起作用。

Hey@Joshua Leonard,谢谢您的回答。您建议的问题是,存储库将处理Reader对象(我假设),然后每个存储库都必须有这个锅炉板代码来处理和清理一次性数据库对象。我几乎试图通过一个方法来路由与DB的交互,该方法接受SQLCommand对象,执行查询并将结果集(如果有)作为某种类型的非DBObject返回,在本例中是我可怕的字典列表,然后我可以处理并创建BusinessObjs的实例。