如何使用实体框架返回多行,并在多个线程上顺序读取它们
本文关键字:线程 顺序 读取 实体 何使用 框架 返回 | 更新日期: 2023-09-27 17:51:10
我有一个时间序列加载到SQL Server,我需要查询,然后允许多个任务顺序从我的SProc读取结果。
从我在谷歌上发现的,似乎有可能执行SProc或LINQ查询/语句。我目前不熟悉LINQ (SProc将首选方法)。其中一个比另一个有什么优势吗?
在执行SProc之后,我如何以顺序的方式访问数据?我假设它SProc会改变我的ObjectContext。如果是这种情况,我是否需要每个任务保持其所在行的计数,然后使用此计数器访问ObjectContext的每个参数以获得所需的值?
SProc代码如下:
CREATE PROCEDURE [dbo].[DataRetrieval]
@StartTime Time(0) ='00:00:00',
@EndTime Time(0) ='00:00:00',
@StartDate Date ='2012-01-01',
@EndDate Date ='2012-01-01',
@Location nchar(6) ='Scotland'
AS
/*
Author: Hans
Date: 09-01-2013
Purpose: Used to load a large section of data into memory.
*/
SET NOCOUNT ON;
BEGIN
SELECT *
FROM
dbo.Data
WHERE
LOCATION = @Location
AND ( Date = @StartDate AND Time >= @StartTime
OR Date > @StartDate )
AND ( Date = @EndDate AND Time < @EndTime
OR Date < @EndDate )
ORDER BY
DATE, TIME
END
编辑USR…
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = "dbo.Data_GetStoredProcedureList";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandTimeout = 10;
cmd.Connection = connection;
try
{
connection.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader != null && reader.HasRows)
{
cancelTask.ThrowIfCancellationRequested();
while (reader.Read())
{
Entity rowData = new Entity();
rowData.RoutineName = reader["Routine_Name"].ToString();
rowData.ParameterName = reader["Parameter_Name"].ToString();
rowData.DataType = reader["Data_Type"].ToString();
sProcListRetrieval.Results.Add(rowData);
}
}
}
}
您可以轻松地在内存中缓冲数百万个对象。在List
中缓冲T-SQL的结果,并将该列表传递给工作线程。