2012-08-16 151 views
0

这是我的代码:实体框架4.1例外

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; } 
    } 

通过执行删除操作,我得到了以下异常:

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

如果我删除DeleteFilesFromServer(int id)方法的删除工作。有人能帮我吗?

回答

0

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

+0

如何解决它? – Jameel 2012-08-16 10:51:59

+0

在删除DocumentFolder之前,请删除列表中的所有文档DocumentFolder.Documents – 2012-08-16 12:45:31

+0

我已收到答案,感谢您获取有价值的信息。 allDocuments.ForEach(DOC => _ dbContext.Document.Remove(DOC)); _dbContext.SaveChanges(); – Jameel 2012-08-17 05:35:01