'entité du même type a déjà la même valeur de clé primaire' erreur à l'aide de AutoMapper
Lorsque j'utilise AutoMapper, cette Erreur s'est produite:
Fixation d'une entité de type " MyProject.DAL.L'utilisateur' a échoué en raison d'une autre entité du même type a déjà la même valeur de clé primaire. Cela peut se produire lors de l'utilisation de la "Attacher" la méthode ou la mise à l'état d'une entité à "Inchangé" ou "Modifié" si toutes les entités dans le graphe de conflit de valeurs de clé. Cela peut être parce que certaines entités sont nouveaux et n'ont pas encore reçu de base de données-clé générée de valeurs. Dans ce cas, utilisez la fonction 'Ajouter' méthode ou la "Ajoutée" état de l'entité pour suivre le graphique, puis de définir l'état de non-nouvelles entités à "Inchangé" ou "Modifié" selon le cas.
Je veux Utilisateur de carte à UserModel quand je retrive à partir de la base de données. - Je changer UserModel propriétés de l'INTERFACE utilisateur, puis la carte de nouveau à l'Utilisateur et de le mettre à Jour.
Mon code est ici:
public UserModel GetUserByUserId(int id)
{
var user = db.Users.Where(p => p.UserId == id).FirstOrDefault();
var userModel = Mapper.Map<UserModel>(user);
return userModel;
}
public void Update(UserModel userModel)
{
var user = Mapper.Map<User>(userModel);
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
}
mais si je n'utilise pas l'auto mappeur et écrire quelque chose comme ci-dessous de code, il fonctionne correctement.
public void Update(UserModel userModel)
{
updatingUser.Email = userModel.Email;
updatingUser.FirstName = userModel.FirstName;
updatingUser.ModifiedDate = DateTime.Now;
updatingUser.LastName = userModel.LastName;
updatingUser.Password = userModel.Password;
updatingUser.UserName = userModel.UserName;
db.Entry(updatingUser).State = EntityState.Modified;
db.SaveChanges();
}
Que dois-je faire:
updatingUser
semble sortir de nulle part sur votre deuxième fonction de mise à jourVeuillez vous référer à ma réponse sur ASP.NET MVC - Fixation d'une entité de type "MODELNAME" a échoué à cause d'une autre entité du même type a déjà la même valeur de clé primaire.
OriginalL'auteur alite | 2015-09-04
Vous devez vous connecter pour publier un commentaire.
C'est peut-être juste moi qui suis pas au courant de certaines fonctionnalités, mais votre
update
fonction ressemble funky pour moi. Je ne vois pas comment il serait associé à votre newuser
avec celle existante dans la base de données.C'est la façon dont je l'approche.
ou, si vous préférez faire comme votre deuxième
update
fonction neMerci. J'ai utilisé en premier et il a fonctionné correctement.
bien expliqué mais si UserModel a une collection de DTO, cette carte fonction tente d'ajouter que la perception de l'objet, nous avons extrait de la base de données (utilisateur dans le premier exemple), ce qui est incorrect. Est-il un moyen de contourner cela?
lors de la configuration de mappage, vous pouvez configurer qu'il ignore que la collecte, et la fusion de la collection dans le manuellement
Parfait merci @sam-i-am
OriginalL'auteur Sam I am
l'objet A et son enfant de l'objet B, puis définir toutes les propriétés de puis de rinçage vers la .
Nous n'avons plus: rattaché (l'Objet A et B de la précédente )
Nous n'avons plus récupéré l'objet B séparément.
OriginalL'auteur tom