2012-08-16 193 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