3
我有一個存儲過程如下:在Linq-to-SQL中,IMultipleResults不止一次命中數據庫?
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到SQL執行一次整個存儲過程,那麼GetResult()
用於從MEMOR得到它y,還是執行n個查詢(往返db調用),其中n是存儲過程中選擇語句的數量(本例中爲4)?
我問的原因是因爲以下行幾乎花費相同的時間量,即使對於大型數據執行:
IMultipleResults results = context.SomeMethod(SomeID);
但以下用一些明顯的時候,哪裏運行resultSet3是大量的數據:
IEnumerable resultSet3 = results.GetResult().ToList();
應該很容易找到:啓動SQL Server Profiler,並觀察應用程序和SQL Server之間的流量!我敢打賭,Linq-to-SQL將在一次調用中檢索**所有**結果集,然後僅返回您在客戶端請求的任何集合。 – 2013-03-06 06:14:32
自SQL Server支持Multiple活動結果集 – 2013-03-06 06:16:26