Я разрабатываю 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» и не могу понять, почему ... У кого-нибудь возникли какие-либо идеи? (может ли это быть проблемой контроля параллелизма?).