关于递归Tree方法的System.Data.Entity.Infrastructure.DbUpdateException

时间:2015-01-25 12:26:28

标签: c# asp.net-mvc database

我正在开发一个像C#asp.net mvc这样的网站Mega(文件存储)作为个人项目,并且遇到了一些障碍。我有两个类,文件和文件夹:

public class File
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public string Checksum { get; set; }
    public int Size { get; set; }
    public virtual Folder ParentFolder { get; set; }
    public virtual User Owner { get; set; }
}

public class Folder
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Folder ParentFolder { get; set; }
    public virtual User Owner { get; set; }
}

有些元素尚未实现,所以如果有些内容似乎缺失,请不要感到惊讶;) 关于删除文件夹,我遇到了一些问题:

public IHttpActionResult DeleteFolder(int id)
{    
    Folder folder = db.Folders.Find(id);
    if (folder == null)
    {
        return NotFound();
    }      
    FilesController filesController = new FilesController();
    var Folders = db.Folders.Where(a => a.ParentFolder.Id == id);
    var Files = db.Files.Where(b => b.ParentFolder.Id == id);

    foreach (File f in Files)
    {
        filesController.DeleteFile(f.Id);
    }

    foreach (Folder f in Folders)
    {
        DeleteFolder(f.Id);
    }
    db.Folders.Remove(folder);
    db.SaveChanges();

    return Ok(folder);
}

从我的FoldersController调用此方法,它找到属于给定文件夹(id)的文件列表,并对子文件夹执行相同操作。然后它从FilesController调用DeleteFile方法并删除所有这些方法,并再次递归调用DeleteFolder方法,以便删除文件夹树的其余部分(至少是子部分)。 问题是,当我实际调用deleteFolder方法时,我得到一个“System.Data.Entity.Infrastructure.DbUpdateException”,似乎无法弄清楚为什么......有没有人碰巧有任何想法? (它可能类似于并发控制问题吗?)。

1 个答案:

答案 0 :(得分:0)

看一下这篇文章here

只需从文件夹中删除文件,即表示您没有标记要删除的文件。您必须在文件上实际调用DeleteObject