Asp.net mvc 3 实体框架4.1例外

Asp.net mvc 3 实体框架4.1例外,asp.net-mvc-3,entity-framework-4.1,Asp.net Mvc 3,Entity Framework 4.1,这是我的代码: public void DeleteFolder(Entities.DocumentFolder folder) { DeleteFilesFromServer(folder.Id); _dbContext.Entry(folder).State = EntityState.Deleted; _dbContext.SaveChanges(); } public void Delet

这是我的代码:

 public void  DeleteFolder(Entities.DocumentFolder folder)
    {
         DeleteFilesFromServer(folder.Id);
        _dbContext.Entry(folder).State = EntityState.Deleted;
        _dbContext.SaveChanges();          
    }

   public void  DeleteFilesFromServer(int id)
   {
       var allDocuments = _dbContext.Document.Where(x => x.FolderId == id).ToList();
       foreach (var filePath in allDocuments.Select(document => HttpContext.Current.Server.MapPath("~/Documents/") + document.DocumentFileName).Where(System.IO.File.Exists))
       {
           System.IO.File.Delete(filePath);
       }
   }


 public class DocumentFolder
    {
      public DocumentFolder()
      {
          Documents=new List<Document>();
      }
      public int Id { get; set; }
      public string FolderName { get; set; }
      public int ParentFolderId { get; set; }
      public List<Document> Documents { get; set; }
    }
  public class Document
  {
      public int Id { get; set; }
      public string DocumentName { get; set; }
      public string DocumentFileName { get; set; }
      public int FolderId { get; set; }
      public virtual DocumentFolder Folder { get; set; }
  }
public void DeleteFolder(Entities.DocumentFolder文件夹)
{
DeleteFilesFromServer(folder.Id);
_dbContext.Entry(folder).State=EntityState.Deleted;
_dbContext.SaveChanges();
}
public void DeleteFilesFromServer(int-id)
{
var allDocuments=_dbContext.Document.Where(x=>x.FolderId==id.ToList();
foreach(allDocuments.Select中的var filePath(document=>HttpContext.Current.Server.MapPath(“~/Documents/”)+document.DocumentFileName)。其中(System.IO.File.Exists))
{
System.IO.File.Delete(文件路径);
}
}
公共类文档文件夹
{
公共文档文件夹()
{
文件=新列表();
}
公共int Id{get;set;}
公共字符串FolderName{get;set;}
public int ParentFolderId{get;set;}
公共列表文档{get;set;}
}
公共类文档
{
公共int Id{get;set;}
公共字符串DocumentName{get;set;}
公共字符串DocumentFileName{get;set;}
public int FolderId{get;set;}
公共虚拟文档文件夹{get;set;}
}
通过执行删除操作,我得到了以下异常:

System.InvalidOperationException:操作失败:无法更改关系,因为一个或多个外键属性不可为null。对关系进行更改时,相关外键属性设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象


如果删除
DeleteFilesFromServer(int-id)
方法,则删除将起作用。有人能帮我吗?

如果要删除DocumentFolder,需要删除与DocumentFolder相关的文档对象,因为在您的模型中,field文件夹不可为空。只有当dbContext知道文档对象存在时,即使用Select方法加载文档时,才会发生这种情况

在删除DocumentFolder之前,请删除列表DocumentFolder中的所有文档。Documents我得到了答案。感谢您提供的宝贵信息。allDocuments.ForEach(doc=>\u dbContext.Document.Remove(doc))_dbContext.SaveChanges();