You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Сейчас при выполнении запросов порядок таков, что сначала в SQLDataService выполняются Delete, потом Update и Create. Такой порядок может приводить к ошибкам:
Например, есть типы А и В. У обоих типов в одном обращении к сервису данных по разным объектам есть Delete и Update. В типе А удаляется запись. В типе В запись обновляется обнулением ссылки на удаляемый объект типа А. Корректный порядок: сначала обновление с обнулением ссылки, потом удаление. Фактический порядок, что сначала удаление, потом обновление, что приводит к ошибкам.
Возможно логично, чтобы сначала шло Update и Insert, потом Delete по таблице, но нужно продумывание данной ситуации на возможные побочные эффекты.
Не всегда это будет работать. Если есть например уникальные индексы по какому-то полю, то Insert/Update могут не сработать при нарушении условия уникальности в результате этой операции из-за того, что Delete старой записи, с которой возникает дубль, еще не выполнился. Мне кажется в общем случае тут нет правильного порядка. Ситуации могут быть что и в одном и в другом порядке может быть нужно сохранять. По идее тут прикладному разработчику нужно думать и выполнять несколько UpdateObject-ов в рамках одной транзакции.
Описание ошибки
Сейчас при выполнении запросов порядок таков, что сначала в SQLDataService выполняются Delete, потом Update и Create. Такой порядок может приводить к ошибкам:
Например, есть типы А и В. У обоих типов в одном обращении к сервису данных по разным объектам есть Delete и Update. В типе А удаляется запись. В типе В запись обновляется обнулением ссылки на удаляемый объект типа А. Корректный порядок: сначала обновление с обнулением ссылки, потом удаление. Фактический порядок, что сначала удаление, потом обновление, что приводит к ошибкам.
Возможно логично, чтобы сначала шло Update и Insert, потом Delete по таблице, но нужно продумывание данной ситуации на возможные побочные эффекты.
После реализации:
The text was updated successfully, but these errors were encountered: