簡體   English   中英

ASP.NET MVC - 一張表級聯刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM