Question

J'utilise EF 4.1 dans un projet MVC 3 et je rencontre des problèmes avec l'insertion d'un objet. J'utilise session, ainsi se tenir sur certains objets. Concrètement:

J'ai une classe simple avec une relation parent-enfant:

public class Event
{
    public User Promotor {get;set;}
}

Le promoteur est basé sur le CurrentUser. Dans mon application je stocke la CurrentUser en session http. Maintenant, quand j'ajouter un événement comme celui-ci l'utilisateur (et tous les objets liés) est insérée une fois de plus avec une nouvelle clé primaire.

        //1st request inserts/loads the user
        User user;
        using (var context = new MyDbContext())
        {
            user = new User();
            context.Users.Add(user);
            context.SaveChanges();
        }

        //2nd request saves the event 
        var before = db.Users.Count();
        var @event = new Event
        {
            Promotor = user, //user was kept in Session
        };
        db.Entry(@event).State = EntityState.Added;
        db.SaveChanges();

Quand je vérifie l'état de l'utilisateur, il est « ajouté » et bien que la clé primaire est 0 et EF devrait savoir qu'il est déjà persistant. Comment résoudre ce problème sans ajouter beaucoup de à mon code de persistance. Est-ce que je dois mon refixer currentuser à la nouvelle dbcontext à chaque demande? Cela conduira à db code « fuite » dans ma demande. Je veux garder les choses DB dans une couche de données. J'utilise un référentiel comme celui-ci:

    public void Save(T entity)
    {
        dbContext.Entry(entity).State = IsPersistent(entity) ? 
            EntityState.Modified : EntityState.Added;
        dbContext.SaveChanges();
    }
Était-ce utile?

La solution

Comme vous l'avez-vous déjà mentionné, refixer l'utilisateur à votre contexte actuel devrait résoudre le problème. La seule autre façon que je connaisse, serait de récupérer à nouveau une fois l'objet dans votre contexte en fonction de la valeur de clé primaire.

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