【问题标题】:Entity Framework Persisting local scope variable?实体框架持久化局部范围变量?
【发布时间】:2010-02-27 02:09:48
【问题描述】:

大家好,我有以下方法:

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 ....当我用另一种方法保存更改时,它会尝试从另一种方法中保存 usuario。这似乎是错误的,因为变量范围是本地的而不是全局的 问题是,当方法结束时,它不应该破坏那个变量吗? 我该如何解决这个问题??

【问题讨论】:

  • @Diego Correa:您已收到 6 个问题的答案,但未接受其中任何一个问题的答案。如果我可以建议,最好复习一下这些问题,看看你能接受哪些答案。

标签: c# linq entity-framework


【解决方案1】:

EF 的 ObjectContext 跟踪它加载的对象。如果您再次请求对象,它会为您提供与之前相同的实例(而不是副本)。

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

ObjectContext 实例是这些实例的范围。如果你想开始一个新的 UnitOfWork,你应该从一个新的 ObjectContext 开始。

【讨论】:

  • 但在我的情况下,它正在缓存变量并且我设置的任何值都无法按预期工作,我在一篇文章(bit.ly/9gG50s)中看到,一旦您查询了一个值,第二次搜索它就可以了在上下文的缓存上而不是转到数据库,我该如何解决这个问题??
  • 正如大卫所说,您应该创建一个新上下文或查看此stackoverflow.com/questions/2331225/…
猜你喜欢
  • 1970-01-01
  • 2016-06-12
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多