2010-09-01 16 views
6

Sto sviluppando un'applicazione ASP.NET e ho un problema con il modello EF 4.0.Modello EF 4.0 che memorizza nella cache i dati e non rileva i dati modificati

Il modello EF rileva i dati appena aggiunti e cancellati, ma non i dati modificati dal database.

Ecco un esempio del problema che cosa ho.

Database A-:

script per generare la tabella del database "dipendenti"

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

Ecco un link per un progetto di esempio Click Here.

Procedura per riprodurre l'errore:

1- creare il database ed eseguire lo script per creare la tabella.

2- Inserire i dati di test nella tabella dei dipendenti ed eseguire l'applicazione. i dati verranno caricati nella pagina predefinita.

3- Modificare la stringa di connessione ed eseguire l'applicazione.

3- Aggiornare alcuni valori nel database (formano direttamente lo sql). e aggiorna la pagina

Troverete che l'applicazione continua a visualizzare i vecchi dati, mentre se si aggiunge o si elimina l'elemento dalla tabella, viene aggiunto o rimosso dalla vista rispettivamente.

Grazie in anticipo per il vostro aiuto.

risposta

6

Questo è un comportamento corretto basato su concetti essenziali di ORM. Funziona allo stesso modo per Linq in SQL. La ragione di ciò è il modello di progettazione chiamato IdentityMap che garantisce che ogni entità identificata dalla sua chiave venga creata una sola volta per il contesto dell'oggetto. Quindi la tua prima query crea entita ma le tue query successive non le ricreano - esistono già. La descrizione completa di questo problema è descritta in questo molto bello article.

+0

Grazie per questa risposta dettagliata. –

0

È possibile evitare questo utilizzando un nuovo oggetto del modello entità nel codice in ogni metodo. Oppure puoi leggere ulteriori informazioni nella seguente risposta alla stessa domanda nel MSDN, Click Here

Problemi correlati