0

これは私のコードです:

 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: 操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。

DeleteFilesFromServer(int id)メソッドを削除すると、削除が機能します。誰かが私を助けることができますか?

4

1 に答える 1

0

DocumentFolder を削除する場合は、DocumentFolder に関連する Document オブジェクトを削除する必要があります。モデルでは、Folder フィールドが null 可能ではないためです。これは、dbContext が Document オブジェクトの存在を認識している場合、つまり Select メソッドでドキュメントをロードした場合にのみ発生します。

于 2012-08-16T10:23:10.503 に答える