2015-01-25 2 views
0

Я разрабатываю Mega (хранилище файлов), как веб-сайт в C# asp.net mvc, как личный проект и немного запутался. У меня есть два класса, файлы и папки:System.Data.Entity.Infrastructure.DbUpdateException по рекурсивному методу дерева

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) и делает то же самое для дочерних папок. Затем он вызывает метод DeleteFile из FileController и удаляет все из них и рекурсивно вызывает метод DeleteFolder, чтобы удалить остальную часть дерева папок (по крайней мере, дочернюю часть). Проблема в том, что когда я на самом деле вызываю метод deleteFolder, я получаю «System.Data.Entity.Infrastructure.DbUpdateException» и не могу понять, почему ... У кого-нибудь возникли какие-либо идеи? (может ли это быть проблемой контроля параллелизма?).

ответ

0

Взгляните на это сообщение here.

Просто удалив файл из папки, вы не помечаете файл для удаления. Вы должны на самом деле позвонить DeleteObject на файл.

Смежные вопросы