У меня есть приложение, отображающее дерево каталогов. Похоже, у меня отображаются каталоги. Пользователь выбирает каталог, нажимает кнопку удаления, и каталог и подкаталоги должны быть удалены.
Вот мой класс Node:
public class Node
{
public int Id { get; set; }
public String Name { get; set; }
public Node Parent { get; set; }
public int? ParentId { get; set; }
}
Вот моя кнопка
<button type="button" style="display:none;" id="delete_node" class="btn btn-danger" data-base-url="@Url.Action("Delete","Home")">
Delete node
</button>
Jquery метод, который запускает действие удаления:
$('#delete_node').on('click', function (e) {
var urlToDelete = $(this).data('base-url') + '/' + SelectedId;
$.post(urlToDelete, function () {
location.reload();
});
});
и действие удаления:
[HttpPost]
public HttpStatusCodeResult Delete(int id)
{
Node nodeInDb = _context.NodeEntities.Single(n => n.Id == id);
_context.NodeEntities.Remove(nodeInDb);
_context.SaveChanges();
return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
}
Все хорошо, но когда каталог, который я хочу удалить, пуст. Когда в каталоге есть подкаталоги, и я нажимаю кнопку «Удалить», появляется ошибка
SqlException: инструкция DELETE конфликтует с ограничением SAME TABLE REFERENCE «FK_dbo.Nodes_dbo.Nodes_Parent_Id». Конфликт произошел в базе данных «TreeDB», таблице «dbo.Nodes», столбце «ParentId». Оператор завершен.
Кажется, что каталоги не удаляются каскадным способом. Как включить эту опцию?
Образцы записей в базе данных <----------------- </p>