2009-12-22 5 views
2

Nous avons un contexte à long cadre de l'entité en cours d'exécution (ne demandez pas pourquoi ...), avec une requête qui récupère une entité utilisateur avec ses associations:Entity Framework - association supprimée apparaît toujours dans le deuxième appel

var user = entities.UserSet.Include("UserAddresses") 
        .Where(u => u.Id == 1).FirstOrDefault(); 

Si une ligne d'une adresse utilisateur est supprimée de la base de données (par un autre processus), et que nous réexécutons cette requête, la ligne supprimée est conservée, même si nous définissons MergeOption avant l'appel (pour aller la base de données dans tous les cas et ne pas utiliser le cache):

(Essayé tout ensemble que j'ai dans la requête, sans succès)

entities.UserSet.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges; 
entities.UserAddress.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges; 
entities.UserSet.Include("UserAddresses").MergeOption = System.Data.Objects.MergeOption.OverwriteChanges; 

Quelqu'un peut-il aider à résoudre ce problème?

Répondre

2

Aucune option ne supprime automatiquement un élément de la mémoire qui n'est pas sur le disque.

http://blog.dynatrace.com/2009/03/11/adonet-entity-framework-unexpected-behaviour-with-mergeoptions/

Vous pouvez effacer tout le contexte, mais ce serait probablement vous causer d'autres problèmes.

Fondamentalement EF ne fonctionne pas bien avec des contextes de longue durée, il peut être plus rapide pour vous de résoudre le problème et obtenir un système plus stable en supprimant les contextes de longue durée.

0

Vous avez obtenu .SaveChanges() avant de sélectionner après la suppression. Pas d'autre solution.