J'ai une entité avec une relation de clé étrangère dans une table d'utilisateurs de fournisseur d'appartenance asp.net.Entity Framework - Un élément avec la même clé a déjà été ajouté. - Erreur lors de la tentative de définition d'une relation de clé étrangère
Cette partie du modèle ressemble à ceci:
Je ne peux pas sembler affecter la relation de clé étrangère lors de l'insertion du dossier de la table des utilisateurs, le dossier contenant la clé étrangère à la table aspnet_Users
. Je continue à obtenir l'erreur:
An item with the same key has already been added.
Le code J'utilise ressemble:
UserAdmin userToAdd = new UserAdmin();
...
userToAdd.aspnet_Users = membershipUser;
//line above OR line below
userToAdd.aspnet_UsersReference.EntityKey = new System.Data.EntityKey("ProjectEntities.aspnet_Users", "UserId", membershipUser.UserId);
db.AddToUsers(userToAdd);
db.SaveChanges();
est la question que je vous pose la EF pour ajouter un nouvel enregistrement de la table aspnet_Users
(le record pour la table de clé primaire associée) lorsque cet enregistrement est déjà là?
Comment affecter une valeur de clé étrangère à une entité dans laquelle l'enregistrement de clé primaire existe déjà?
bloc de code de test Mise à jour:
MembershipUser membershipUser = Membership.CreateUser("[email protected]", "pass", "[email protected]");
Entities db = new Entities();
UserAdmin newUser = new UserAdmin();
newUser.Name = "blah";
newUser.DateAdded = DateTime.Now;
Guid key = new Guid(membershipUser.ProviderUserKey.ToString());
aspnet_Users membershipUserRecord = db.aspnet_Users.Where(u => u.UserId == key).FirstOrDefault();
newUser.aspnet_Users = membershipUserRecord;
//newUser.aspnet_UsersReference.EntityKey = new System.Data.EntityKey("Entities.aspnet_Users", "UserId", membershipUserRecord.UserId);
db.ObjectStateManager.ChangeObjectState(membershipUserRecord, EntityState.Unchanged);
db.AddToUsers(newUser);
db.SaveChanges();
Ce code génère l'erreur:
An item with the same key has already been added.
Est-ce que 'membershipUser' est suivi par le (même) DataContext? –
Oui, l'enregistrement membershipUser a été récupéré par la même instance de modèle d'entité que celle utilisée pour valider le nouvel enregistrement utilisateur. – BrooklynDev