Tengo una entidad con una relación de clave externa con una tabla de usuarios de proveedor de membresía asp.net.Entity Framework: ya se ha agregado un elemento con la misma clave. - Error al tratar de definir una relación de clave externa
Esta parte del modelo se parece a esto:
Me parece que no puede asignar la relación de clave externa cuando se inserta el registro de la tabla usuarios, el registro que contiene la clave externa a la tabla aspnet_Users
. Sigo recibiendo el error:
An item with the same key has already been added.
El código que estoy usando el siguiente aspecto:
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();
es el tema que estoy pidiendo a la EF para agregar un nuevo registro aspnet_Users
mesa (el récord de la tabla de clave primaria asociada) cuando ese registro ya está allí?
¿Cómo puedo asignar un valor de clave externa a una entidad en donde ya existe el registro de clave principal?
Actualizado bloque de código de prueba:
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();
Este código genera el error:
An item with the same key has already been added.
es 'membershipUser' rastreados por el (mismo) DataContext? –
Sí, el registro de usuario miembro fue recuperado por la misma instancia de modelo de entidad que se está utilizando para confirmar el nuevo registro de usuario. – BrooklynDev