EFCore FromSql 异步

use*_*037 6 entity-framework-core ef-core-2.0 ef-core-2.1

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

public virtual DbSet<Task<GetCaseCaseContextModel>> CaseGetCaseContextData { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

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

    return notes;
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

严重性代码描述项目文件行抑制状态错误CS0029无法隐式转换类型'System.Threading.Tasks.Task<System.Collections.Generic.List<System.Threading.Tasks.Task<CaseManagement.Infrastruct.Database.Repo.Case.GetCase .GetCaseCaseContextModel>>>' 到 'System.Collections.Generic.List<CaseManagement.Infrastruct.Database.Repo.Case.GetCase.GetCaseNotesContextModel>' CaseManagement.Infrastruct.Database C:\Dev\Bitbucket\webscv\Fortellis\CaseManagement\CaseManagement .Infrustruct.Database\Repo\Case\GetCase\GetCaseRepoHelper.cs 72 活动

当我将上下文更改为:

public virtual Task<DbSet<GetCaseCaseContextModel>> CaseGetCaseContextData { get; set; }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

严重性代码说明项目文件行抑制状态错误 CS1061“Task<DbSet>”不包含“FromSql”的定义,并且找不到接受类型“Task<DbSet>”的第一个参数的可访问扩展方法“FromSql”(是您缺少 using 指令或程序集引用吗?) CaseManagement.Infrastruct.Database C:\Dev\Bitbucket\webscv\Fortellis\CaseManagement\CaseManagement.Infrustruct.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
};
Run Code Online (Sandbox Code Playgroud)

谢谢亚历克斯

小智 11

您必须使用 ToListAsync 重写:

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

await