Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 我应该使用存储过程还是linq来提取临时数据_C#_Vb.net_Linq - Fatal编程技术网

C# 我应该使用存储过程还是linq来提取临时数据

C# 我应该使用存储过程还是linq来提取临时数据,c#,vb.net,linq,C#,Vb.net,Linq,(注意,我知道,但我相信这个问题不是基于意见的) 现在我也可以 选项1:使用存储过程 我可以在SQL Server中编写一个存储过程,它获取坦克的产品id并返回购买它的人。如果由于某种原因,存储过程没有选中一些本应被选中的人(可能是过程中的逻辑错误,或者我忘记添加条件),我可以轻松地针对数据库测试存储过程 但这将是一个很长的存储过程:( 选项2:使用Linq 或者,如果我在Linq中完成这一切并编写单元/集成测试,然后发现由于某些原因,有些人没有被录取,那么很难测试原因,因为测试将针对我的模拟数

(注意,我知道,但我相信这个问题不是基于意见的)

现在我也可以

选项1:使用存储过程

我可以在SQL Server中编写一个存储过程,它获取坦克的产品id并返回购买它的人。如果由于某种原因,存储过程没有选中一些本应被选中的人(可能是过程中的逻辑错误,或者我忘记添加条件),我可以轻松地针对数据库测试存储过程

但这将是一个很长的存储过程:(

选项2:使用Linq

或者,如果我在Linq中完成这一切并编写单元/集成测试,然后发现由于某些原因,有些人没有被录取,那么很难测试原因,因为测试将针对我的模拟数据运行,而不是实际的数据库服务器

此外,如果在linq查询中发现错误,则必须重新编译代码

考虑到测试逻辑更容易,这里的首选方式应该是什么?我个人更喜欢linq方式,但我担心在选择逻辑中稍后会发现一个小错误并导致调试问题


谢谢

这是一个首选项,但我更喜欢在逻辑和往返数据库的次数有限的情况下使用linq。对于复杂的查询,可能是多部分的,也可能需要多个单独的子查询,存储过程是一种可行的方法-无论是性能还是性能(在避免多次往返服务器的情况下)和调试(直接在SSMS中运行T-SQL,直到完全正确为止)


99%的时间我在代码中进行查询(linq/c#),但在某些情况下,存储过程是有意义的,这可能是其中之一。

您有权复制实际生产数据吗?或者,由于许多完全合法的原因,这是不可能的吗?如果是,您可以根据这些数据对您的工作进行编码。如果不可能,我将假设您已签约创建您正在使用的此应用程序。在这种情况下,您的客户(与您签约的一方)可以简单地为您提供包含所有可能场景的真实模拟数据。因此,您可以针对所有可能的冲突测试任何一种方法。谢谢,不,我将无法访问实时数据,但我将拥有一份实时数据的副本(通过工具匿名).好吧,考虑到它只是匿名的,我冒昧地猜测,您感兴趣测试任何一种方法的相关数据仍然存在于您收到的数据中。投票以基于意见的方式结束,因为我只是在考虑发布一个与“我更喜欢使用LINQ”完全相反的答案。这两种方法都有其优缺点,要客观地回答这里给出的问题仍然太难了。LINQ和存储过程都可以在任何程度上进行测试,我认为这“更容易”关键取决于你习惯了什么以及你有多少经验。我认为你需要研究全文搜索(顺便说一句,有弹头的坦克,在任何人的书中都不是一个好例子-谁是你的客户??金正日),如果linq代码中有一个bug,那么我必须重新编译整个代码并部署它:(…因此,自动化您的部署并消除这一痛苦,当然您也有存储过程的部署过程…?谢谢,我想根据您的回答,我将能够做出决定