Удаление сущности с дочерними отношениями с помощью проблемы .Net Entity Framework - PullRequest
2 голосов
/ 10 апреля 2010

Боже мой, EF так расстраивает. Кажется, я не могу понять, что мне нужно, чтобы я мог удалить объект. Кажется, я могу удалить объект, но не связанные дочерние объекты. Может кто-нибудь сказать мне, что такое правило, когда вы хотите удалить все связанные дочерние объекты данного объекта?

Я пытался загрузить все связанные объекты, как это:

Entry entry = ModelContext.GetObjectByKey(new EntityKey("ModelContainer.EntrySet", "Id", id)) as Entry;
entry.ChildEnteries.Load();

if (entry != null)
{
    ModelContext.DeleteObject(entry);
    ModelContext.SaveChanges();
}

Я получаю ошибки, связанные с отношениями: A relationship is being added or deleted from an AssociationSet 'EntryEntry'. With cardinality constraints, a corresponding 'Entry1' must also be added or deleted.

Почему я не могу просто загрузить объект с помощью modelcontext.GetObjectByKey и удалить его вместе с дочерними объектами?

Мой другой вопрос: могу ли я удалить объект, используя команду Entity, вот так?

DELETE e from objectset as e where e.id = 12

Я пробовал несколько вариантов, и все они выдают исключения.

1 Ответ

3 голосов
/ 10 апреля 2010

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

Тогда я думаю, что вы хотите что-то вроде этого:

ObjectSet os = ModelContext.ObjectSet.First(x => x.id == 12);
ModelContext.DeleteObject(os);      
ModelContext.SaveChanges();

Вы также можете выполнять каскадное удаление в каркасе сущностей, но убедитесь, что вы установили его в своем SQL, а затем убедитесь, что вы выполняете обновление из источника данных из файла EDMX. В частности убедитесь, что в CSDL-детали есть следующее :

<Association Name="FK_ItemChildren_Item">
 <End Type="Model.Item" Role="Item" Multiplicity="1">
  <OnDelete Action="Cascade"></OnDelete>
 </End>
 <End Type="Model.ItemChildren" Role="ItemChildren"
  Multiplicity="*">
 </End>
</Association>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...