2010-09-01 6 views
6

Je développe une application ASP.NET et j'ai un problème avec le modèle EF 4.0.Le modèle EF 4.0 cache les données et ne détecte pas les données modifiées

Le modèle EF détecte les données nouvellement ajoutées et supprimées, mais pas les données modifiées de la base de données.

Voici un exemple du problème que j'ai.

Database A:

script pour générer la table de base de données "Employés"

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:

Voici un lien pour un exemple de projet Click Here.

étapes pour reproduire l'erreur:

1- Créer la base de données et exécutez le script pour créer la table.

2- Insérez les données de test dans la table des employés et exécutez l'application. les données seront chargées dans la page par défaut.

3- Modifiez la chaîne de connexion et exécutez l'application.

3- Mettez à jour certaines valeurs dans la base de données (directement à partir du sql). et actualiser la page

Vous constaterez que l'application affiche toujours les anciennes données, tandis que si vous ajoutez ou supprimez un élément de la table, il est ajouté ou supprimé de la vue respectivement.

Merci d'avance pour votre aide.

Répondre

6

Ceci est un comportement correct basé sur les concepts essentiels d'ORM. Cela fonctionne également pour Linq to SQL. La raison en est le motif de conception appelé IdentityMap qui garantit que chaque entité identifiée par sa clé est créée une seule fois pour le contexte de l'objet. Ainsi, votre première requête crée des entites mais vos requêtes suivantes ne les recréent pas - elles existent déjà. La description complète de ce problème est décrite dans ce très joli article.

+0

Merci pour cette réponse détaillée. –

0

Vous pouvez éviter cela en utilisant un nouvel objet du modèle d'entité dans votre code dans chaque méthode. Ou vous pouvez lire plus d'informations dans la réponse suivante à la même question dans le MSDN, Click Here

Questions connexes