EFCore FromSql асинхронный - PullRequest
0 голосов
/ 20 марта 2019

Я бы хотел выполнить пару вызовов хранимых процедур SELECT параллельно. Я настраиваю свой контекст следующим образом:

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

Мой класс репо выполняет следующие действия:

        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 или ссылку на сборку?) CaseManagement .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
        };

Спасибо Alex

1 Ответ

1 голос
/ 21 мая 2019

Вы должны переписать:

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

Положите в ожидании

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...