0

參考 - How to get original values of an entity in Entity Framework? - 我嘗試提取EF中實體的原始值。但ObjectStateManager.GetOBjectStateEntry給出實體的修改值。我錯過了什麼?跟蹤多層/層級環境中實體的原始值

我在多層環境中使用EF 4.0(POCO實體)。

public bool Update(IMessage objMessage) 
    { 
     object ob = objMessage.GetMaster(); 
     appSancAdvice _entity = ob as appSancAdvice; 

     using (var context = new BISEntities()) 
     { 
      context.appSancAdvices.Attach(_entity); 
      ObjectStateEntry objectState = context.ObjectStateManager.GetObjectStateEntry(_entity); 
      objectState.ChangeState(System.Data.EntityState.Modified); 

      // this is giving the modified value of _entity 
      var originalValues = context.ObjectStateManager.GetObjectStateEntry(_entity).OriginalValues["sancstatus_id"]; 

      int _i = context.SaveChanges(); 
      return (_i > 0) ? true : false; 
     } 
    } 

回答

0

由於附加實體,上下文不知道原始值。如果您想要原始值,則必須從數據庫中獲取對象。當您從新附加的對象獲得OriginalValues時,EF不會自動執行此操作。

+0

謝謝格特!那麼如何在一個部分類中擴展該實體來添加一個相同實體類型的對象,以便在需要時可以保存檢索到的實體的副本。 會影響性能嗎? –

+0

我不會那樣做。它讓你的班級做事情是上下文的責任。保持課程簡單(單一責任)是面向對象設計的核心原則之一。如果要頻繁比較/複製舊值和新值,請爲其創建服務類。 –

+0

Gert!請你詳細說明一下,如何?這種設計的簡要概述。 –