2011-01-30 20 views
1

私はこのようなフォルダの構造を有している:(。すなわち、すべての子供たちをフォルダ2削除も削除されている場合)Entity Frameworkの自己参照エンティティの削除

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

質問はそれらを削除カスケード接続する方法です。私はON DELETEアクションを設定できません.MSSQLはそれを許可しないからです。あなたはいくつかのsuggesionsを与えることができますか?

更新日:私はこのストアドプロシージャを書きましたが、残しておいても、変更する必要はありますか?

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トリガーです。

です:

  • は、パラメータ/ DELETED(例えば再帰CTEアプローチ)からFOLDER2の階層を生成する)
  • は/

を一のDELETE文で、円形のカスケードをこの階層を削除します外部キー違反は発生しません。

関連する問題