如何使用实体框架返回多行,并在多个线程上顺序读取它们

本文关键字:线程 顺序 读取 实体 何使用 框架 返回 | 更新日期: 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的结果,并将该列表传递给工作线程。