System.Data.Entity.Infrastructure.DbUpdateException 关于递归树方法
System.Data.Entity.Infrastructure.DbUpdateException on recursive Tree method
我正在用 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" 并且似乎无法弄清楚为什么......有人会碰巧有任何想法吗? (会不会是并发控制问题?)。
看看这个posthere.
只需从文件夹中删除文件,您就不会将文件标记为删除。您必须在文件上实际调用 DeleteObject
。
我正在用 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" 并且似乎无法弄清楚为什么......有人会碰巧有任何想法吗? (会不会是并发控制问题?)。
看看这个posthere.
只需从文件夹中删除文件,您就不会将文件标记为删除。您必须在文件上实际调用 DeleteObject
。