Caching EF 4.0模型缓存数据,不检测修改的数据

Caching EF 4.0模型缓存数据,不检测修改的数据,caching,static,singleton,entity-framework-4,readonly,Caching,Static,Singleton,Entity Framework 4,Readonly,我正在开发ASP.NET应用程序,我对EF4.0模型有问题 EF模型检测新添加和删除的数据,但不检测数据库中修改的数据 这是我遇到的问题的一个例子 A-数据库: 用于生成“Employees”数据库表的脚本 CREATE TABLE [dbo].[Employees] ( [id] [int] IDENTITY(1, 1) NOT NULL, [name] [nvarchar](50) NULL, CONSTRAINT [PK_Employees] PRI

我正在开发ASP.NET应用程序,我对EF4.0模型有问题

EF模型检测新添加和删除的数据,但不检测数据库中修改的数据

这是我遇到的问题的一个例子

A-数据库:

用于生成“Employees”数据库表的脚本

CREATE TABLE [dbo].[Employees]
  (
   [id] [int] IDENTITY(1, 1)
         NOT NULL,
   [name] [nvarchar](50) NULL,
   CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED ( [id] ASC )
    WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
        IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
        ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
  )
ON [PRIMARY]
B-申请:

下面是一个示例项目的链接

重现错误的步骤:

1-创建数据库并运行脚本以创建表

2-在employees表中插入测试数据,然后运行应用程序。数据将加载到默认页面中

3-更改连接字符串并运行应用程序

3-更新数据库中的一些值(直接形成sql)。然后刷新页面

您会发现应用程序仍然显示旧数据,而如果从表中添加或删除项,则会分别从视图中添加或删除该项


提前感谢您的帮助。

这是基于ORM基本概念的正确行为。它也适用于Linq到SQL。其原因是名为IdentityMap的设计模式,它确保由其键标识的每个实体只为对象上下文创建一次。因此,您的第一个查询将创建实体,但后续查询不会重新创建它们——它们已经存在。这个问题的完整描述在这篇非常好的文章中进行了描述。

您可以通过在每个方法的代码中使用实体模型的新对象来避免这种情况。
或者,您也可以在MSDN中对同一问题的以下答案中阅读更多信息,

谢谢您的详细回答。