views:

45

answers:

1

Is there any easy way to do what seems best described as a "Cascading Delete" in LLBLGen? An example of what I'm looking for:

You've got these tables:

Customer:  
-Id

Order:  
-Id  
-CustomerId

OrderDetail:
-Id
-OrderId

Now, I want to delete a specific Customer and all the things that depend on it (all its orders, and all its orders' orderdetails). Since the database is going to throw a fit if I delete a Customer before deleting the Orders that have its Id as a foreign key, I need to pretty much:

  1. Get the customer
  2. Get the customer's Orders
  3. Get each Orders' OrderDetails
  4. Delete each OrderDetail
  5. Delete each Order
  6. Delete each customer

Now, this seems like a pretty common task- I'd think there's be some sort of Delete(Entity entityToDelete, bool isRecursive) function somewhere. Anyway, is there any easy way to do this?

+4  A: 

No, LLBLGen Pro doesn't support cascading deletes. We didn't build this in for the following reasons: - it's not always possible to do cascading deletes (imagine a diamond shaped model, where two / more paths lead from a to b. This is also why for example sqlserver not always performs /allows cascade deletes - in target-per-entity inheritance, cascade deletes is not possible.

We do support bulk deletes directly on the db. So you don't have to fetch all entities to delete first. For example, to delete all order details for the orders for the customer, create a direct delete on orderdetails where you specify as filter a fieldcompareset predicate where you specify a filter on order based on the customerid in order. Then delete the orders using the same predicate (without the join), and then delete the customer. You can group these deletes in a unit of work to run them in 1 go in a transaction easier.

If you get stuck with this, please post a question on our forums: http://www.llblgen.com/tinyforum .We're happy to help you

Frans Bouma
Thanks- decent explanation, workable solution.
Fishtoaster