Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Некорректный порядок запросов в SQLDataService #204

Open
Anisimova2020 opened this issue Oct 13, 2021 · 1 comment

Comments

@Anisimova2020
Copy link
Contributor

Описание ошибки

Сейчас при выполнении запросов порядок таков, что сначала в SQLDataService выполняются Delete, потом Update и Create. Такой порядок может приводить к ошибкам:

Например, есть типы А и В. У обоих типов в одном обращении к сервису данных по разным объектам есть Delete и Update. В типе А удаляется запись. В типе В запись обновляется обнулением ссылки на удаляемый объект типа А. Корректный порядок: сначала обновление с обнулением ссылки, потом удаление. Фактический порядок, что сначала удаление, потом обновление, что приводит к ошибкам.

Возможно логично, чтобы сначала шло Update и Insert, потом Delete по таблице, но нужно продумывание данной ситуации на возможные побочные эффекты.

После реализации:

  1. Раскомментировать интеграционный тест TestProperQueryOrder в проекте https://github.com/Flexberry/NewPlatform.Flexberry.ORM.
  2. Оценить необходимость кода по обработке ситуации наличия ссылок иерархического типа (ссылка на самого себя) в SQLDataService.
@mao29
Copy link

mao29 commented Nov 16, 2021

Не всегда это будет работать. Если есть например уникальные индексы по какому-то полю, то Insert/Update могут не сработать при нарушении условия уникальности в результате этой операции из-за того, что Delete старой записи, с которой возникает дубль, еще не выполнился. Мне кажется в общем случае тут нет правильного порядка. Ситуации могут быть что и в одном и в другом порядке может быть нужно сохранять. По идее тут прикладному разработчику нужно думать и выполнять несколько UpdateObject-ов в рамках одной транзакции.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants