2016-12-16 127 views
1

我正在使用模型優先方法,並且我有一個抽象類MyEntity,它具有幾個帶有屬性[NotMapped]的標誌。我的所有實體都繼承自MyEntity。在ObjectMaterialized事件處理程序的內部,我設置了這些標誌來指示實體是物化的,並且與我的應用程序有關。實體框架6 ObjectMaterialized事件和SaveChanges覆蓋

在我的SaveChanges()重寫中,我調用base.SaveChanges(),然後重置這些標誌。看起來它會導致實體更新數據庫,儘管沒有真正的數據更改。

我的問題是:

  1. 這些標誌沒有被映射到數據庫列,爲什麼改變它們造成的實體更新到數據庫?

  2. 我試圖將這些標誌放入部分類中,而不是由每個實體繼承的抽象類。看起來這些標記更改仍然會導致實體更新到數據庫。這是爲什麼?

  3. 我也嘗試將這些標誌屬性設置爲在base.SaveChanges()之前重置其值之後保持不變。雖然這不會導致數據庫更新,但我的應用程序不能正確運行。這種方法基本上與實體/財產狀態一起玩,以避免更新數據庫。但是它可能導致什麼副作用?

回答

0

最後,我通過將實體狀態更改爲EntityState.Unchanged來解決此問題。它適用於我的應用程序。但是,如何改變國家還有一個問題。

通過以下方式來改變狀態引起的問題:

dbContext.Entry(entity.Entity).State = EntityState.Unchanged; 

我使用下面的代碼更改狀態:

ObjectStateEntry state = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntry(entity.Entity); 
state.ChangeState(EntityState.Unchanged);