views:

915

answers:

2

Hi, 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 red 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 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.

Thanks in advance....

+3  A: 

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.

Devart
This is generally right (+1), but you should really have a DB cascade if you do this.
Craig Stuntz
+1  A: 

Hi,

Thanks for replay. 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
Waheed