2012-04-30 3 views
0

からナビゲーションプロパティを含むIは、以下に示すように(.Includeを使用して積極的なロードを定義することによって)Sessionオブジェクトと関連Medicine objectを取得するために、私のリポジトリクラス内に以下のメソッドを持っていない: -イーガーローディング私のリポジトリクラス

public Session GetSession(int id) 
     { 
      return entities.Sessions.Include(d => d.Medicine).FirstOrDefault(d => d.SessionID == id); 

     } 
次のように上記のリポジトリメソッドルック呼び出す

私のアクションメソッド: -

[HttpPost] 
     public ActionResult Delete(int id) 
     { 

      try 
      { 
       //string desc; 
       var s = repository.GetSession(id); 

       repository.DeleteSession(s); 

       repository.Save(); 
       return Json(new { IsSuccess = "True", id = s.SessionID, description = s.Medicine.Name }, JsonRequestBehavior.AllowGet); 
      } 
      catch (ArgumentNullException) 
//code goes here 

私が直面しています問題は、物理的にを使用してオブジェクトを削除した後、メモリからMedicine navigation propertyにアクセスできなくなります。次の例外が発生します。ユーザコードでNullReferenceExceptionが処理されていませんでした。s.SessionIDにアクセスできますが、削除した後でもメモリにアクセスできます。これは、削除されたSessionオブジェクトが(熱心な読み込みをしていない)でないことを意味しますMedicineナビゲーションプロパティ!!! BR

答えて

1

他のエンティティとの関係を持つエンティティを削除すると、Entity Frameworkはそれらのオブジェクト間の関係を同時に削除します。あなたは、エンティティを削除前に、JSON結果のためのオブジェクトを作成することによって、問題を解決することができます

var s = repository.GetSession(id); 

var result = new { IsSuccess = "True", id = s.SessionID, 
        description = s.Medicine.Name }; 

repository.DeleteSession(s); 
repository.Save(); 

return Json(result, JsonRequestBehavior.AllowGet); 

データベース内のセッションから医学への参照がない場合Includeので、これは当然の助けにはなりません関連オブジェクトを返しません。このケースは別途処理する必要があります(関係が必要ない場合のみ可能です)。

+0

返信ありがとうございます。薬局IDである薬局のPKを参照する外来キーがセッションテーブル(medicineId)にあります。 –

関連する問題