2010-02-26 84 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