Удалить объект и связанные с ним объекты

2

Кто-нибудь знает, как удалить объект и все связанные с ним объекты.

Например, у меня есть таблицы, Продукты, Категория, 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".

Теги:
entity-framework
c#-4.0
linq-to-entities

4 ответа

7
Лучший ответ

Спасибо за ответ. Я решил свою проблему. Использование того же каскада в EDMX. Для объяснения я отвечаю на свой вопрос.:)

Мы должны добавить <OnDelete Action="Cascade"></OnDelete> в файл EDMX двумя частями

  • В разделе SSDL
  • В части CSDL
5

Взгляните на этот вопрос.

Там описывается случай одноуровневой ассоциации. Если вы установите действие OnDelete соответствующим образом, не должно быть никаких проблем для удаления всех связанных дочерних объектов.

  • 0
    Это обычно правильно (+1), но вы должны действительно иметь каскад БД, если вы делаете это.
3

Кроме того, если вы посмотрите на свой файл edmx в visual studio, вы можете выбрать "ассоциацию" и выбрать свойство "End1 OnDelete" и установить "Cascade".

0

Стоит отметить, что вам нужно убедиться, что объекты загружены для их удаления - я включил Cascade, но это не помогло, пока у меня не были загружены требуемые объекты (интересно, мне также не понадобилось включить Cascade вообще в моем случае). Я документировал детали сообщения, которые помогли мне больше всего в отслеживании деталей Entity Framework удалить дочерний объект

Ещё вопросы

Сообщество Overcoder
Наверх
Меню