Проблема:
По сути, оператор обновления ждет бесконечно ( ExecuteNonQueryAsync () ) по некоторым причинам. Вставка работает просто отлично, я пытался жестко закодировать простое заявление об обновлении с жестко заданными параметрами (без слияние ), та же история, даже пыталсяудалить , где предложение и обновить все строки, опять та же проблема.
После установки commandTimeout в 1 с мне удалось идентифицировать TimeoutException , почему это происходит?Понятия не имею.
Редактировать: Поворот сюжета.Теперь у меня есть случайные успешные обновления, что ошеломляет меня еще больше.Я пробовал в основном каждый возможный сценарий, который мог придумать, чтобы идентифицировать любые шаблоны, находящиеся в проблеме, мой единственный вывод заключается в том, что частота успеха обновлений абсолютно случайна ...
Тем не менее вставки работают нормально.
Это упрощенная часть кода.
public class CipCheckRepository : ICipCheckRepository
{
private string connectionString = "Data Source=****;User Id=****;PASSWORD=****;Persist Security Info=True;";
public CipCheckRepository()
{}
public async Task InsertOrUpdate(CipCheck cipCheck)
{
using (var uow = new UnitOfWork(connectionString))
{
using (var cmd = uow.CreateCommand())
{
cmd.CommandText = @"
MERGE INTO test
USING dual
ON (id = :CAD_ID)
WHEN MATCHED THEN
UPDATE SET value = :ISRA_NUMBER
WHEN NOT MATCHED THEN
INSERT
(
id,
value
)
VALUES
(
:CAD_ID,
:ISRA_NUMBER
)";
cmd.Parameters.AddWithValue("CAD_ID", 1);
cmd.Parameters.AddWithValue("ISRA_NUMBER", cipCheck.IsraNumber);
cmd.CommandTimeout = 1;
try
{
await cmd.ExecuteNonQueryAsync();
}
catch (OracleException ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
}
}
UnitOfWork класс создан для вопросов абстракции.
Как определить причину никогдазапрос и какие шаги можно предпринять, чтобы его предотвратить?