2011-01-30 80 views
1

我的文件夾這樣的結構:實體框架自參照實體刪除

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

的問題是如何級聯刪除它們(即當刪除文件夾2所有的孩子也被刪除。)。我無法設置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 

回答

0

通常它是一個存儲過程或INSTEAD OF觸發器。

那就是:在一個DELETE語句

  • 從參數生成的文件夾2的層次結構/刪除(例如遞歸CTE辦法))
  • 刪除這個層次

圓形的級聯/外鍵違規不會觸發。