У меня есть задание, состоящее из нескольких этапов, некоторые из которых являются внешними пакетами, запускаемыми путем вставки записи в конкретную таблицу 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, кажется, не обнаруживает записывать изменения или обнаруживать их только очень поздно и случайным образом. Любая известная причина, которая может объяснить такое поведение? Любая помощь будет оценена, спасибо.