【问题标题】:Entity Framework gives me the old data although i changed them实体框架给了我旧数据,虽然我改变了它们
【发布时间】:2013-05-15 22:29:24
【问题描述】:

我对实体框架有一个奇怪的问题:

我在 Windows Server 上有一个 SQL Server 数据库,我通过实体框架通过我的应用程序访问它。

现在我更改了数据库中的一个条目,但使用实体框架的应用程序仍然给我旧值,尽管它没有保存在任何地方。

这可能是什么以及如何解决这个问题?

编辑
我从数据库中获取数据是这样的:

(from p in _myEF.master_Items where p.id == userId 
 select p.Location).FirstOrDefault();

EDIT2
当我通过 Visual Studio 在本地启动它时,我看到了新值。如果我使用已部署的版本,我会看到数据库中不再存在的旧值

EDIT3: 这是我的连接字符串<add name="MyEntities" connectionString="metadata=res://*/MyData.csdl|res://*/MyData.ssdl|res://*/MyData.msl;provider=System.Data.SqlClient;provider connection string="data source=foo;initial catalog=MyDb;persist security info=True;user id=Admin;password=xxxx;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />

【问题讨论】:

  • 这里没什么好说的了。开始时是否在数据库中保存了正确的值? _myEF 是什么类型?表中是否有多个匹配项因 FirstOrDefault 而丢失?
  • 没关系,当我通过 Visual Studio 在本地启动它时,我看到了新值。如果我使用已部署的版本,我会看到数据库中不再存在的旧值
  • _myEF 是 ObjectContext 类型
  • 您能否向我们展示您的数据库的连接字符串?
  • 请记住,EF 在内部缓存上下文中的项目。 _myEF 是每个请求的新对象吗?因为如果它在 static 字段中,那就是造成这种情况的原因。

标签: sql-server entity-framework


【解决方案1】:

Entity Framework 将对象内部缓存在 DbContext 实例中。这些都是短暂的,缓存的目的是每次查找具有相同 ID 的实体时,都会返回该实体的相同实际实例。

这意味着在使用 Entity Framework 时,您不应将 DbContext 存储在 static 字段中。为每个请求创建一个新请求。

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2023-03-24
    • 1970-01-01
    • 2020-06-02
    相关资源
    最近更新 更多