2010-02-26 82 views
1

好傢伙,我有以下方法:實體框架持久化本地作用域變量?

var usuario; 

      usuario = UniapontaService.GetUsuarioUniapontaPlanejamentoEstrategico(x => x.IdUsuario == VWUsuarioUniaponta.IdUsuario && 
         x.PlanejamentoEstrategico.IdPlanejamentoEstrategico == HorarioTrabalhoCorrente.PlanejamentoEstrategico.IdPlanejamentoEstrategico); 

      TxtTotalHorasMes.Text = usuario.QuantidadeHorasDisponivelMes.ToString(); 

      usuario = null; 

當執行這種方法,然後再次執行它,它似乎是EF什麼是緩存第一個查詢的值: 例:去雖然方法,查詢爲25的usuario,然後我在執行過程中甚至在數據庫中更改該值時設置null(即測試),當它再次傳入此方法時,變量仍然是25 ....並且當我保存另一種方法中的更改,嘗試使用另一種方法保存常用方法。這似乎是錯誤的,因爲變量作用域是本地的而不是全局的 問題是,當方法結束時它不應該銷燬該變量? 我該如何解決這個問題?

+0

@Diego Correa:您已收到6個問題的答案,但未接受任何答案。如果我可能會建議,那麼查看這些問題並查看您可以接受的答案是一個不錯的主意。 – 2010-02-26 17:16:41

+0

哦完成;)..... – 2010-02-26 17:51:23

回答

2

EF的ObjectContext跟蹤它加載的對象。如果你再次要求對象,它會給你以前給你的相同的實例(不是副本)。

http://msdn.microsoft.com/en-us/library/bb896269.aspx

的ObjectContext的實例這些實例的範圍。如果你想開始一個新的UnitOfWork,你應該從一個新的ObjectContext開始。

+0

但在我的情況下,它緩存變量和我設置的任何值不能按預期工作,我在文章(http://bit.ly/9gG50s)中看到,一旦你查詢一個值,第二次搜索它去上下文的緩存而不是去數據庫,我該如何解決這個問題? – 2010-02-26 18:26:45

+0

大衛說你應該創建一個新的上下文或看看這個http://stackoverflow.com/questions/2331225/how-to-refresh-objectcontext-cache-from-db – rovsen 2010-02-28 00:58:28