LLBLGen Каскадный Удалить? - PullRequest
2 голосов
/ 12 августа 2010

Есть ли простой способ сделать то, что лучше всего описать как «Каскадное удаление» в LLBLGen?Пример того, что я ищу:

У вас есть эти таблицы:

Customer:  
-Id

Order:  
-Id  
-CustomerId

OrderDetail:
-Id
-OrderId

Теперь я хочу удалить конкретного клиента и все, что от него зависит (все его заказы, и все его заказы детализируются).Поскольку база данных подойдет, если я удалю Клиента перед удалением Заказов, у которых его Id является внешним ключом, мне нужно в значительной степени:

  1. Получить клиента
  2. Получить заказы клиента
  3. Получить каждый заказ OrderDetails
  4. Удалить каждый OrderDetail
  5. Удалить каждый заказ
  6. Удалить каждого клиента

Теперь это кажется довольно распространенной задачей - я думаю, что где-то есть какая-то функция Delete (Entity entityToDelete, bool isRecursive).В любом случае, есть ли простой способ сделать это?

1 Ответ

4 голосов
/ 12 августа 2010

Нет, LLBLGen Pro не поддерживает каскадное удаление. Мы не встроили это по следующим причинам: - не всегда возможно выполнить каскадное удаление (представьте себе ромбовидную модель, в которой два / более пути ведут от a к b. Это также объясняет, например, что sqlserver не всегда выполняет / разрешает каскадное удаление - при наследовании цели на сущность каскадное удаление невозможно.

Мы поддерживаем массовое удаление непосредственно на БД. Таким образом, вам не нужно извлекать все сущности для удаления в первую очередь. Например, чтобы удалить все детали заказа для заказов для клиента, создайте прямое удаление по деталям заказа, где вы указываете в качестве фильтра предикат fieldcompareset, в котором вы указываете фильтр для заказа на основе customerid в заказе. Затем удалите заказы, используя тот же предикат (без объединения), а затем удалите клиента. Вы можете сгруппировать эти удаления в единицу работы, чтобы упростить их выполнение за 1 транзакцию.

Если вы застряли с этим, пожалуйста, оставьте вопрос на наших форумах: http://www.llblgen.com/tinyforum. Мы будем рады помочь вам

...