簡體   English   中英

實體框架自引用實體刪除

[英]Entity Framework self referencing entity deletion

我有這樣的文件夾結構:

Folder1
  Folder1.1
  Folder1.2
Folder2
  Folder2.1
    Folder2.1.1
and so on..

問題是如何級聯刪除它們(即,當刪除folder2時,所有子項也將被刪除)。 我無法設置ON DELETE操作,因為MSSQL不允許這樣做。 你能給點建議嗎?

更新:我寫了這個存儲過程,我可以保留它還是需要一些修改?

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE sp_DeleteFoldersRecursive
    @parent_folder_id int
AS
BEGIN
    SET NOCOUNT ON;

    IF @parent_folder_id = 0 RETURN;

    CREATE TABLE #temp(fid INT );

    DECLARE @Count INT;

    INSERT INTO #temp(fid)
    SELECT FolderId FROM Folders WHERE FolderId = @parent_folder_id;

    SET @Count = @@ROWCOUNT;

    WHILE @Count > 0
    BEGIN
        INSERT INTO #temp(fid) 
            SELECT FolderId FROM Folders WHERE EXISTS
                   (SELECT FolderId  FROM #temp
                    WHERE Folders.ParentId = #temp.fid)
             AND  NOT EXISTS
                  (SELECT FolderId FROM #temp
                   WHERE Folders.FolderId = #temp.fid);    

             SET @Count = @@ROWCOUNT;         
    END

    DELETE Folders FROM Folders INNER JOIN #temp ON Folders.FolderId = #temp.fid; 
    DROP TABLE #temp;
END
GO

通常是存儲的proc或INSTEAD OF觸發器。

那是:

  • 根據參數/ DELETED生成Folder2的層次結構(例如,遞歸CTE方法)
  • 在一個DELETE語句中刪除此層次結構

循環級聯/外鍵沖突將不會觸發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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