EntityFramework 學習【Entity Lifecycle 實體生命週期】

風靈使發表於2018-06-08

當我們執行CRUD(Create,Read,Update,Delete)操作之前,最重要的是搞明白實體的生命週期和EntityFrameword怎麼管理實體

在一個實體的生命週期裡,每個實體都有一個實體狀態(基於上下文DbContext執行的操作),實體狀態是一個列舉型別System.Data.Entity.EntityState

包含以下值:

1.Added

2.Deleted

3.Modified

4.Unchanged

5.Detached

這個上下文Context不僅擁有從資料庫中查詢出來的實體引用,而且擁有實體的狀態和維護實體屬性的變化修改,這個特徵就是變化跟蹤(Change Tracking

實體狀態從Unchanged 狀態變到Modified狀態是由上下文context自動處理的,其他所有的改變必須明確地呼叫DbContextDbSet中的方法來完成

下面的圖示說明實體上的哪些操作改變實體的狀態,反過來影響資料庫的操作
這裡寫圖片描述

由上圖所示,context中新的實體有Added實體狀態,因此上下文將執行插入資料庫命令,同樣的,當你通過L2E查詢一個存在的實體,它將是Unchanged實體狀態,這是因為你剛剛查詢實體且沒有在該實體上執行任何操作。當你更改已存在實體的值時,它的狀態變為Modified實體狀態,在SaveChanges時,將執行更新操作。從contxt上下文刪除實體,它變為Deleted狀態,將執行刪除操作。

因此,實體上的操作將改變實體的狀態,Context通過實體的狀態建立和執行資料庫命令。

相關文章