EFCore FromSql异步

时间:2019-03-20 18:32:35

标签: entity-framework-core ef-core-2.0 ef-core-2.1

我想并行执行几个SELECT存储过程调用。 我将上下文设置如下:

public virtual DbSet<Task<GetCaseCaseContextModel>> CaseGetCaseContextData { get; set; }

然后,我的repo类执行以下操作:

        public async Task<List<GetCaseNotesContextModel>> GetCaseNotes(string caseId)
    {
        var notes = _context.CaseGetCaseContextData.FromSql("x_Fortellis_CaseGetCaseNotes @p0", caseId, caseId).ToListAsync();

        return notes;
    }

但是出现以下错误:

  

严重性代码描述项目文件行抑制状态   错误CS0029无法将类型'System.Threading.Tasks.Task >>'隐式转换为'System.Collections.Generic.List'CaseManagement.Infrastructure.Database C:\ Dev \ Bitbucket \ webscv \ Fortellis \ CaseManagement \ CaseManagement.Infrustructure.Database \ Repo \ Case \ GetCase \ GetCaseRepoHelper.cs 72有效

当我将上下文更改为:

public virtual Task<DbSet<GetCaseCaseContextModel>> CaseGetCaseContextData { get; set; }

我收到以下错误:

  

严重性代码描述项目文件行抑制状态   错误CS1061'任务>'不包含'FromSql'的定义,并且找不到可以接受的扩展方法'FromSql'接受类型为'任务>'的第一个参数(您是否缺少using指令或程序集引用?) .Infrastructure.Database C:\ Dev \ Bitbucket \ webscv \ Fortellis \ CaseManagement \ CaseManagement.Infrustructure.Database \ Repo \ Case \ GetCase \ GetCaseRepoHelper.cs 70有效

我最终想使用以下方式致电给他们

            GetCaseCaseContextModel caseData = new GetCaseCaseContextModel();
        List<GetCaseNotesContextModel> notes = new List<GetCaseNotesContextModel>();

        Parallel.Invoke(
            async () => caseData = await GetCaseData(caseId, dealerGroupId),
            async () => notes = await GetCaseNotes(caseId)
        );

        return new GetCaseContextModel()
        {
            CaseData = caseData,
            Notes = notes
        };

谢谢 亚历克斯

1 个答案:

答案 0 :(得分:0)

您必须重写:

   public async Task<List<GetCaseNotesContextModel>> GetCaseNotes(string caseId)
    {
        var notes = await _context.CaseGetCaseContextData.FromSql("x_Fortellis_CaseGetCaseNotes @p0", caseId, caseId).ToListAsync();
        return notes;
    }

等待