views:

111

answers:

3

Dear All,

I am developing ASP.NET application and I have problem with the EF 4.0 model.

The EF model detects the newly added and deleted data, but not the modified data from the database.

Here is an example of the problem what I have.

A- Database:

Script to generate the "Employees" database table

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- Application:

Here is a link for a sample project Click Here.

Steps to reproduce the error:

1- Create the database and run the script to create the table.

2- Insert test data in the employees table, and run the application. the data will be loaded in the default page.

3- Change the connection string and run the application.

3- Update some values in the database (directly form the sql). and refresh the page

You will find that the application still displaying the old data, while if you add or delete item from the table, it's added or removed from the view respectively.

Thanks in advance for your help.

+1  A: 

This is correct behavior based on essential concepts of ORM. It also works same for Linq to SQL. The reason for this is design pattern called IdentityMap which ensures that each entity identified by its key is created only once for object context. So your first query creates entites but your subsequent queries don't recreate them - they already exists. The full description of this problem is described in this very nice article.

Ladislav Mrnka
Thank you for this detailed answer.
m_3ryan
A: 

But is there any way to flush that cache? or does it get refreshed automatically every X minutes? The front end of my application is live, and but the admin console is still being developed. Some chages are easy to do using SQL Management Console, but they are not reflected on the application... a page or a button that calls a function to flush the data cache will be very usefull until the admin console is finished...

O'Beron
Also it depends on your code implementation. If you see in my code I tried to implement Singleton design Pattern, to use only one object of the entity model. to solve your solution, you can recycle application Pool on the IIS
m_3ryan
A: 

You can avoid this by using a new object of the entity model in your code in every method. Or you can read more information in the following answer to the same question in the MSDN, Click Here

m_3ryan