views:

459

answers:

1

i have 2 tables without any cascade deletind. i wont to delete parent object with all child objects. i do like this

//get parent object
return _dataContext.Menu.Include("ChildMenu").Include("ParentMenu").Include("Pictures").FirstOrDefault(m => m.MenuId == id);
//then i loop all child objects
var picList = (List<Picture>)menu.Pictures.ToList();
            //foreach (var item in menu.Pictures)
            for (int i = 0; i < picList.Count; i++)
            {
                if (File.Exists(HttpContext.Current.Server.MapPath(picList[i].ImgPath)))
                {
                    File.Delete(HttpContext.Current.Server.MapPath(picList[i].ImgPath));
                }

                if (File.Exists(HttpContext.Current.Server.MapPath(picList[i].ThumbPath)))
                {
                    File.Delete(HttpContext.Current.Server.MapPath(picList[i].ThumbPath));
                }
//**what must i do here?**
//menu.Pictures.Remove(picList[i]);
//                DataManager dm = new DataManager();
//                dm.Picture.Delete(picList[i].Id);

                //menu.Pictures.de
                //_dataContext.SaveChanges();
                //picList[i] = null;

            }

//delete parent object
_dataContext.DeleteObject(_dataContext.Menu.Include("ChildMenu").Include("ParentMenu").Include("Pictures").FirstOrDefault(m => m.MenuId == id););
            _dataContext.SaveChanges();
+2  A: 

It is enough to set the

<OnDelete Action="Cascade" />
for the master association end in the CSDL part of the model.
In this case your code will work.

Devart
Not quite enough. You need to either 1) have all the related entities loaded or 2) have a cascade in the DB.
Craig Stuntz