Кто-нибудь знает, как удалить объект и все связанные с ним объекты.
Например, у меня есть таблицы, Продукты, Категория, ProductCategory и productDetails, productCategory объединяет таблицу как Product, так и Category.
Я прочитал из http://msdn.microsoft.com/en-us/library/bb738580.aspx, что
Удаление родительского объекта также удаляет все дочерние объекты в ограниченные отношения. Этот результат будет таким же, как и
CascadeDelete
свойство ассоциации для отношения.
Я использую этот код:
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();
Но я получаю сообщение об ошибке ObjectContext.SaveChanges();
I.e.,
Отношение добавляется или удаляется из
AssociationSet
'FK_ProductCategory_Product'. С ограничениями мощности необходимо также добавить или удалить соответствующую "ProductCategory".
Спасибо за ответ. Я решил свою проблему. Использование того же каскада в EDMX. Для объяснения я отвечаю на свой вопрос.:)
Мы должны добавить <OnDelete Action="Cascade"></OnDelete>
в файл EDMX двумя частями
Взгляните на этот вопрос.
Там описывается случай одноуровневой ассоциации. Если вы установите действие OnDelete соответствующим образом, не должно быть никаких проблем для удаления всех связанных дочерних объектов.
Кроме того, если вы посмотрите на свой файл edmx в visual studio, вы можете выбрать "ассоциацию" и выбрать свойство "End1 OnDelete" и установить "Cascade".
Стоит отметить, что вам нужно убедиться, что объекты загружены для их удаления - я включил Cascade, но это не помогло, пока у меня не были загружены требуемые объекты (интересно, мне также не понадобилось включить Cascade вообще в моем случае). Я документировал детали сообщения, которые помогли мне больше всего в отслеживании деталей Entity Framework удалить дочерний объект