Waheed
Waheed

Reputation: 10206

Delete Object and its related entities

Does anyone know how to delete an object and all of it's related entities.

For example I have tables, Products, Category, ProductCategory and productDetails, the productCategory is joining table of both Product and Category.

I have read from http://msdn.microsoft.com/en-us/library/bb738580.aspx that

Deleting the parent object also deletes all the child objects in the constrained relationship. This result is the same as enabling the CascadeDelete property on the association for the relationship.

I am using this code:

Product productObj = this.ObjectContext.Product.Where(p => p.ProductID.Equals(productID)).First();

if (!productObj.ProductCategory.IsLoaded)
    productObj.ProductCategory.Load();

if (!productObj.ProductDetails.IsLoaded)
    productObj.ProductDetails.Load();

//my own methods.
base.Delete(productObj);
base.SaveAllObjectChanges();

But I am getting an error on ObjectContext.SaveChanges(); I.e.,

A relationship is being added or deleted from an AssociationSet 'FK_ProductCategory_Product'. With cardinality constraints, a corresponding 'ProductCategory' must also be added or deleted.

Upvotes: 2

Views: 13795

Answers (4)

The Coder
The Coder

Reputation: 5335

It's worth noting that you need to ensure that objects are loaded for them to be deleted - I turned on Cascade but it didn't help until I had the required objects loaded (interestingly I also didn't need the Cascade turned on at all in my case). I've documented details on the post that helped me the most in tracking down the details Entity Framework delete child object

Upvotes: 0

brad oyler
brad oyler

Reputation: 3780

Also, If you look at your edmx file in visual studio, you can select the "association" and select "End1 OnDelete" property and set to "Cascade".

Upvotes: 3

Waheed
Waheed

Reputation: 10206

Thanks for the reply. I have solved my problem. Using the same cascade in EDMX. For the explanation i am answering my own question. :)

We have to add <OnDelete Action="Cascade"></OnDelete> in EDMX file at two portions

  1. In SSDL portion
  2. In CSDL portion

Upvotes: 7

Devart
Devart

Reputation: 121902

Take a look at this question.
There the case of one-level association is described. In case you set the OnDelete action appropriately there should be no problems to delete all associated child objects.

Upvotes: 5

Related Questions