在Linq-to-SQL中,IMultipleResults是否多次击中数据库?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Linq-to-SQL中,IMultipleResults是否多次击中数据库?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1951字,纯文字阅读大概需要3分钟。
内容图文
![在Linq-to-SQL中,IMultipleResults是否多次击中数据库?](/upload/InfoBanner/zyjiaocheng/885/73a92d3c87284bc7b9a3cdbde9426182.jpg)
我有一个存储过程如下:
CREATE PROCEDURE GetMultipleResults
@SomeID int
AS
BEGIN
SELECT * FROM SomeTable1 where SomeColumn1 = @SomeID
SELECT * FROM SomeTable2 where SomeColumn2 = @SomeID
SELECT * FROM SomeTable3 where SomeColumn3 = @SomeID
SELECT * FROM SomeTable4 where SomeColumn4 = @SomeID
END
然后,我使用以下代码执行和检索数据:
[Function(Name = "dbo.SPROCName")]
[ResultType(typeof(ResultSet1))]
[ResultType(typeof(ResultSet2))]
[ResultType(typeof(ResultSet3))]
[ResultType(typeof(ResultSet4))]
public IMultipleResults SomeMethod([Parameter(DbType = "INT")] int? SomeID
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), SomeID);
return ((IMultipleResults)(result.ReturnValue));
}
现在最后,为了获得每个结果,我执行类似以下命令:
public void SomeOtherMethod(int SomeID)
{
DataContext1 context = new DataContext1 (dbConnString);
IMultipleResults results = context.SomeMethod(SomeID);
ResultSet1 resultSet1= results.GetResult().FirstOrDefault();
IEnumerable resultSet2 = results.GetResult().ToList();
IEnumerable resultSet3 = results.GetResult().ToList();
ResultSet4 resultSet4= results.GetResult().FirstOrDefault();
}
我的问题是,Linq-to-SQL是否执行一次整个存储过程,然后使用GetResult()从内存中获取它,还是执行n个查询(往返数据库调用),其中n是select语句的数量在存储的过程中(在此示例中为4)?
我问的原因是因为即使对于大数据,以下行几乎也需要相同的时间来执行:
IMultipleResults results = context.SomeMethod(SomeID);
但是以下部分在运行resultSet3包含大量数据时会花费一些明显的时间:
IEnumerable resultSet3 = results.GetResult().ToList();
解决方法:
当然,到数据库只有一次往返. LinqToSQL无法了解存储过程中的内容,它必须依靠正确应用的ResultType属性.
在内部,LinqToSQL将执行存储过程,然后打开一个数据读取器以检索结果.
对于FirstOrDefault情况,它将检索第一项(如果有),然后使用IDataReader.NextResult跳到下一个结果集.因此,即使resultSet1可能很大,也只需通过网络提取第一行.
对于ToList情况,阅读器将检索整个结果集.因此,如果有大量数据,则将需要更长的时间.
内容总结
以上是互联网集市为您收集整理的在Linq-to-SQL中,IMultipleResults是否多次击中数据库?全部内容,希望文章能够帮你解决在Linq-to-SQL中,IMultipleResults是否多次击中数据库?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。