[英]ASP.NET MVC - One table cascade delete
我有一個顯示目錄樹的應用程序。 看起來我有目錄顯示。 用戶選擇一個目錄,按下刪除按鈕,目錄和子目錄應該被刪除。
這是我的節點類:
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”列中。 該語句已終止。
似乎目錄不會以級聯方式刪除。 我怎樣才能打開這個選項?
數據庫中的樣本記錄<-----------------
我認為 Entity 是用public Node Parent { get; set; }
創建了一個外鍵public Node Parent { get; set; }
public Node Parent { get; set; }
public Node Parent { get; set; }
.
我剛剛提出了一種刪除目錄和子目錄的方法,但我認為這是更好的方法。
private void Remove(Node node)
{
var listOfNodes = _context.NodeEntities.Where(a => a.ParentId == node.Id);
if (listOfNodes != null)
foreach (var node3 in listOfNodes)
Remove(node3);
_context.NodeEntities.Remove(node);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.