2012-04-30 30 views
0

我有庫類內部下面的方法,來檢索Session對象和相關聯的Medicine object(通過定義使用.Include預先加載),如下所示: -預先加載不包括來自我的庫類的導航屬性

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未被用戶代碼description = s.Medicine.Name處理,而我可以訪問s.SessionID,即使在刪除對象,這是否意味着Session被刪除的對象沒有Include(沒有急切加載)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

感謝您的回覆,在會話表(medicineId)中有一個外鍵,它引用了藥物表的PK,它是drugID。 –