Comment puis-je mettre à jour Entity Framework objets sans changer toutes les instances de cet objet?

StackOverflow https://stackoverflow.com/questions/7810989

Question

J'ai ce code qui utilise Entity Framework 4.1 à des entités de base de données d'accès:

    public string Test()
    {
        Navigation nav = db.Navigations.FirstOrDefault();
        List<Navigation> lNav = db.Navigations.ToList();

        foreach (var item in lNav)
        {
            item.Label += " [Edited]";
        }

        return nav.Label;
    }

Quand je lance ceci dans asp.net mvc il retourne ceci:

News [Edited]

Je m'y attendais à revenir:

News

Parce que je pensais que mon foreach ne ferait que modifier le contenu de lNav. Il semble plutôt de modifier toutes les instances des objets d'entité.

Comment puis-je modifier lNav sans modifier aussi nav?

Était-ce utile?

La solution

Essayez AsNoTracking():

Navigation nav = db.Navigations.AsNoTracking().FirstOrDefault();
List<Navigation> lNav = db.Navigations.AsNoTracking().ToList();

De cette façon, les entités chargées ne sont pas attachés au contexte et deux instances différentes devrait être créé pour la première entité. En utilisant AsNoTracking vous désactivez le mappage d'identité entre les valeurs clés d'une entité et des références d'objet qui est responsable du comportement que vous avez observé. (Il peut toujours seulement une référence d'entité avec une clé donnée dans le contexte et EF ne crée pas un nouvel objet si vous chargez une entité avec la même clé. Au contraire, elle renvoie l'objet qui existe déjà dans le contexte.)

Sachez que vous ne pouvez pas utiliser si vous avez l'intention de mettre à jour les entités à l'aide du mécanisme de suivi EFs changent. AsNoTracking() est conçu pour des scénarios en lecture seule.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top