Я использую Entity Framework 4, и у меня есть отношение parent-child с установкой «Cascade Delete». Так что я ожидал бы, когда я удалю дочерний элемент из родителя, когда ребенок будет удален, когда я вызову SaveChanges().EF 4: Удаление дочернего объекта из коллекции не удаляет его - почему?
cuRepository.Attach(_controlUnit);
foreach (var recipe in recipes) {
_controlUnit.Recipes.Remove(recipe);
//repository.DeleteObject(recipe);
}
Вместо этого я получаю сообщение об ошибке:
System.InvalidOperationException occurred Message=The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
Когда я явно удалить ребенок (см комментируемой строки), все это хорошо. Что мне не хватает?
Я была такая же проблема сегодня, и я считаю, что это конструктивный недостаток в Entity Framework. Взаимосвязь между таблицами в SQL Server означает «Cascade delete сирот» и поэтому должна работать. Это работает в NHibernate. К счастью, вы можете заставить его работать после ответа GraemeMiller и связанных с ним вопросов. –