2010-09-01 12 views
6

Ich entwickle ASP.NET-Anwendung und ich habe ein Problem mit dem EF 4.0-Modell.EF 4.0-Modell zwischenspeichert die Daten und erkennt die geänderten Daten nicht

Das EF-Modell erkennt die neu hinzugefügten und gelöschten Daten, nicht jedoch die geänderten Daten aus der Datenbank.

Hier ist ein Beispiel für das Problem, was ich habe.

A- Datenbank: für ein Beispielprojekt Click Here

Hier ist ein Link:

Script "Mitarbeiter" Datenbanktabelle

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- Anwendung zu erzeugen.

Schritte, den Fehler zu reproduzieren:

1- Erstellen Sie die Datenbank und das Skript ausführen, um die Tabelle zu erstellen.

2- Legen Sie Testdaten in die Tabelle employees ein und führen Sie die Anwendung aus. Die Daten werden auf der Standardseite geladen.

3- Ändern Sie die Verbindungszeichenfolge und führen Sie die Anwendung aus.

3- Aktualisieren Sie einige Werte in der Datenbank (direkt aus dem SQL). und aktualisieren Sie die Seite

Sie werden feststellen, dass die Anwendung immer noch die alten Daten anzeigt, während, wenn Sie Element aus der Tabelle hinzufügen oder löschen, es hinzugefügt oder aus der Ansicht entfernt wird.

Vielen Dank im Voraus für Ihre Hilfe.

Antwort

6

Dies ist korrektes Verhalten basierend auf grundlegenden Konzepten von ORM. Es funktioniert auch gleich für Linq zu SQL. Der Grund hierfür ist das Entwurfsmuster namens IdentityMap, das sicherstellt, dass jede Entität, die durch ihren Schlüssel identifiziert wird, nur einmal für den Objektkontext erstellt wird. Ihre erste Abfrage erstellt also Entitäten, aber Ihre nachfolgenden Abfragen erstellen sie nicht neu - sie sind bereits vorhanden. Die vollständige Beschreibung dieses Problems ist in diesem sehr schönen article beschrieben.

+0

Vielen Dank für diese detaillierte Antwort. –

0

Sie können dies vermeiden, indem Sie in jeder Methode ein neues Objekt des Entitätsmodells in Ihrem Code verwenden. Oder lesen Sie weitere Informationen in der folgenden Antwort auf die gleiche Frage in der MSDN, Click Here