У меня есть класс, который организован в иерархию, такую как:
class TestContainer
{
... bla bla bla...
public Virtual Item Items {get;set;}
}
Class Item
{
[Key]
public int ID {get;set;}
public string PropA {get;set;}
public string PropB {get;set;}
[InverseProperty("Parent")]
public virtual ICollection<Item> Children { get; set; }
[InverseProperty("Contents")]
public virtual Item Parent { get; set; }
}
Итак, у меня есть метод обновления, который позволяет пользователю загружать обновленный набор дочерних элементов.
Сначала я не осознавал, но удаление моего контейнера TestContainer не удаляет элементы.
Хорошо, нет проблем, верно?
Я вставил следующие функции (что, вероятно, очень уродливо, но я все еще вфаза прототипирования здесь)
private void DeleteItems(TestContainer existingContainer)
{
//setup a flat list for deletion
List<Item> trashCan = new List<Item>();
//delete the old CI's from the database
BuildDeletionList(existingContainer.Items, ref trashCan);
foreach (Item item in trashCan)
{
context.Items.Remove(item);
}
}
private void BuildDeletionList(ICollection<Item> items, ref List<Item> trashCan)
{
if (items != null)
{
foreach (Item item in items)
{
BuildDeletionList(item, ref trashCan);
}
}
}
private void BuildDeletionList(Item item, ref List<Item> trashCan)
{
if (Item.Children != null)
{
foreach (Item child in Item.Children)
{
BuildDeletionList(item, ref trashCan);
}
}
item.Children.clear();
trashCan.Add(item);
}
Проблема здесь в том, что это либо приводит к сбою моего тестового сервера, либо когда я удаляю рекурсивный бит (и удаляю только родителей - тестирую, что происходит в данный момент), Я получаю следующую ошибку
"Произошла ошибка при сохранении сущностей, которые не предоставляют свойства внешнего ключа для своих отношений. Свойство EntityEntries будет возвращать ноль, поскольку единственная сущность не может быть идентифицирована как источник исключения."
Как лучше всего каскадно удалить Предмет и всех его Детей, чтобы у меня не было сирот вбаза данных?(Как и сейчас)