У меня огромная проблема, которую я пытался решить несколько дней. У меня есть сценарий, в котором я пытаюсь обработать конфликт вставки в моем проекте Xamarin. Проблема заключается в том, что запись в облачной базе данных не существует, поскольку возникла проблема с ограничением внешнего ключа, поэтому я нахожусь в сценарии, в котором обработчику конфликта синхронизации необходимо удалить локальную запись вместе с записью в __operations таблица в SQLite. Я пробовал все . Удалите с переопределением, установленным на «true», чтобы удалило локальную запись и все связанные операции. Не работает Я просто пытался принудительно удалить его, обращаясь к хранилищу SQL вручную:
var id = localItem[MobileServiceSystemColumns.Id];
var operationQuery = await store.ExecuteQueryAsync("__operations", $"SELECT * FROM __operations WHERE itemId = '{id}'", null).ConfigureAwait(false);
var syncOperation = operationQuery.FirstOrDefault();
var tableName = operation.Table.TableName;
await store.DeleteAsync(tableName, new List<string>(){ id.ToString() });
if (syncOperation != null)
{
await store.DeleteAsync("__operations", new List<string>() { syncOperation["id"].ToString() }).ConfigureAwait(false);
}
Я могу запросить таблицу __operations и увидеть идентификатор элемента, который я хочу удалить. Метод DeleteAsync выполняется без исключения, но статус не возвращается, поэтому я понятия не имею, сработало ли это или нет. Когда я пытаюсь снова синхронизировать операцию упорно существует. Это кажется смешным . Как мне просто удалить операцию без синхронизации с веб-сервисом? Я собираюсь копнуть дальше и попытаться усилить это с помощью библиотеки SQLiteRaw, но я действительно надеюсь, что упустил что-то очевидное? Кто-нибудь может помочь? СПАСИБО!