2015-11-12 33 views
3

下面的代碼應該做什麼?在這段代碼中添加包含表的目的是什麼?它是否應該級聯刪除與PersonId相關的JobType,還是隻刪除具有指定PersonId的Person?澄清entityframework功能

db.tblPerson.Remove(db.tblPerson.Include("tblJobType").FirstOrDefault(c => c.PersonId== PersonId)); 
+1

您是否嘗試過運行代碼並分析結果? –

+0

我剛剛做了,但這讓我感到困惑,因爲我仍然在表格中看到相關的JobType,這可能是因爲另一個代碼問題,我只想確認我的理論理解。謝謝 – user3340627

回答

2

在這種情況下,.Include是多餘的或真的很糟糕的設計。

多餘:

  • .INCLUDE用於熱切負載相關實體(Documentation),因爲這是立即交給卸下襬臂功能,是從未使用過的相關實體,因此它是沒有意義的。
  • 如果這也是試圖刪除相關實體,那麼將會獨立於加載相關實體而發生。這種效果是由級聯確定刪除關係

糟糕的設計中設定:

  • 因爲.INCLUDE將加載相關的實體,它需要兩個表之間的聯接。根據Person和JobType之間的關係(例如可選),這可能導致被排除的人員(例如沒有JobType的人員)。

結論

張貼被簡單地去除具有指定PERSONID的人的代碼。 .Include可能只是一個複製粘貼錯誤,在這裏沒有任何效果。如上所述,這不會導致CascadeDelete,這是由不同的設置決定的。但是,您應該意識到.Include的副作用。