Удаление записей из базовых данных - PullRequest
0 голосов
/ 10 ноября 2018

В моей базе данных есть 2 таблицы: Car и Garage

, где Car и Garage связаны друг с другом через внешние ключи:

В Car внешний ключ - carHasGarages. Вся схема выглядит так:

Destination: Garage
Inverse: `garageHasCar`
Delete rule: `Cascade`
Type: `To Many`

В Garage внешний ключ garageHasCar и схема:

Destination: Car
Inverse: `carHasGarage`
Delete rule: `Nullify`
Type: `To Many`

При попытке пакетного удаления моего garages с помощью предиката:

let predicate = NSPredicate(format: "carNbr IN %@", inactiveCars)

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Car")
request.predicate = predicate
let batchDelete = NSBatchDeleteRequest(fetchRequest: request)

do {
    try context.execute(batchDelete)
}...

где inactiveCars - массив [Int32]

Я получаю следующую ошибку:

error: Unhandled error from executeBatchDeleteRequest Constraint
violation: Batch delete failed due to mandatory MTM nullify inverse on Garage/garageHasCar and userInfo {
"_NSCoreDataOptimisticLockingFailureConflictsKey" =     (
    "<null>"
);
}

Может кто-то указать на мою ошибку? Я пытаюсь решить эту проблему уже 2 дня и не могу справиться. Вот я и подумал, может быть, я ничего не вижу или что-то пропускаю Заранее спасибо за ваше время!

1 Ответ

0 голосов
/ 10 ноября 2018

Из документации этот запрос напрямую вызывается в бэк-хранилище (скорее всего, вы используете sqlite здесь). Поскольку уровень базового каркаса данных здесь не слишком важен, похоже, что ваше удаление оставляет ваш sqlite в плохом состоянии.

Мое предположение о плохом состоянии: все неактивные машины удаляются, но в гаражах по-прежнему хранится ссылка на них, поскольку их отношения не были обработаны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...