Похоже, что запрос EF Core не обнаруживает изменения БД при опросе таблицы. - PullRequest
0 голосов
/ 10 марта 2020

У меня есть задание, состоящее из нескольких этапов, некоторые из которых являются внешними пакетами, запускаемыми путем вставки записи в конкретную таблицу c, и единственный способ узнать, закончился ли пакет или нет, и с каким результатом это опросить таблицу. Я сделал это с помощью do ... while l oop, например так:

do
{
    if (requestCount > maxRequestAttempts)
        throw new InvalidOperationException($"Max attempts ({requestCount}) reached for batch [{batchName}], job stopped.");

    checkResponse = _batchService.CheckBatchStatus(checkRequest);
    _logger.LogDebug($"Check Batch status #{requestCount} of {maxRequestAttempts}, result: {checkResponse.ToJson()}");

        requestCount++;

    if (checkResponse.Batch.IsSucceded == false && checkResponse.Batch.IsFaulted == false)
        System.Threading.Thread.Sleep(ts);
} while (checkResponse.Success && (checkResponse.Batch.IsSucceded == false && checkResponse.Batch.IsFaulted == false));

И за сценой я составил необработанный оператор sql, используемый в качестве параметра .From Sql EF метод:

    const string paramId = "FILEID";

sb.AppendLine("SELECT * ")
  .AppendLine("FROM [Table] t ")
  .AppendFormat("WHERE CAST(t.[XMLPAR] as XML).exist('/PARAMETERS/PARAM[@ID=\"{0}\" and @VALUE=\"{1}\"]') = 1 ", paramId.ToUpperInvariant(), fileId.ToString().ToUpperInvariant())
  .AppendLine("AND t.BatchName = @batchName");

string rawSql = sb.ToString();
using (Context ctx = new Context())
{
    List<Entity21> result = ctx.Entity21.FromSql(rawSql, parameters.ToArray()).ToList();
    var response = result.FirstOrDefault();

    return response;
}

Проблема в том, что после того, как пакет завершился с результатом (я знаю, что через тот же запрос, запущенный из SS Management Studio), запрос, выполненный из EF, кажется, не обнаруживает записывать изменения или обнаруживать их только очень поздно и случайным образом. Любая известная причина, которая может объяснить такое поведение? Любая помощь будет оценена, спасибо.

...