在EF Code-First和自引用实体中使用级联删除?

时间:2013-07-21 01:44:20

标签: c# entity-framework ef-code-first

我有一个包含文件夹和集合的类文件夹:

public class Folder
{
    [Required]
    [Key]
    public virtual int FolderId { get; set; }

    [ForeignKey("ParentFolderId")]
    public virtual Folder ParentFolder { get; set; }
    public virtual int? ParentFolderId { get; set; } 

    [ForeignKey("FolderId")]
    public virtual ICollection<Set> Sets { get; set; }

    [ForeignKey("ParentFolderId")]
    public virtual ICollection<Folder> Folders { get; set; }

}

删除文件夹我这样做:

private void InternalDeleteFolder(DbContext db, int folderId)
    {
        var folder = InternalGetFolder(db, folderId);

        foreach (var subFolder in folder.Folders.ToList())
        {
            InternalDeleteFolder(db, subFolder.FolderId);
        }

        foreach (var set in folder.Sets.ToList())
        {
            InternalDeleteSet(db, set.SetId);
        }

        if (folder.ParentFolder != null)
        {
            folder.ParentFolder.Folders.Remove(folder);
            SaveChanges(db);
        }
        db.Folders.Remove(folder);
        SaveChanges(db);
    }

这对于包含大量数据的文件夹需要很长时间 - 我必须对每个文件夹/集进行一次调用。有没有更好的方法来处理这个问题,或许在我的数据库环境中使用流畅的api?

0 个答案:

没有答案