Entity Framework - Ein Element mit dem gleichen Schlüssel wurde bereits Hinzugefügt. - Fehler beim Versuch, zu definieren, foreign-key-Beziehung
Habe ich eine Entität mit einem Fremdschlüssel-Beziehung zu einer asp.net Mitgliedschaftsanbieter Benutzer-Tabelle.
Dieser Teil des Modells sieht wie folgt aus:
Ich kann nicht scheinen, um ordnen Sie die foreign key-Beziehung, wenn das einfügen des Benutzer-Tabelle-Datensatz, den Datensatz mit dem Fremdschlüssel auf die aspnet_Users
Tabelle. Ich erhalte die Fehlermeldung:
"Ein Element mit demselben Schlüssel wurde bereits
Hinzugefügt worden.
Den code, den ich verwende sieht so aus:
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();
Ist das Problem, das ich verlange das EF hinzufügen eines neuen aspnet_Users
- Tabelle-Datensatz (Datensatz für die zugehörige Primärschlüssel der Tabelle), wenn der Datensatz schon da ist?
Wie würde ich weisen Sie eine foreign key-Wert zu einer Person, wo der Primärschlüssel-Datensatz bereits vorhanden ist?
Aktualisierte test-code-block:
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();
Dieser code erzeugt die Fehlermeldung:
"Ein Element mit demselben Schlüssel wurde bereits Hinzugefügt.
- Ist
membershipUser
verfolgt von der (gleichen) DataContext? - Ja der membershipUser-Datensatz wurde abgerufen, indem die gleichen entity-Modell-Instanz wird verwendet, um ein commit der neuen Benutzer-Datensatz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, ich dachte, dieses heraus. Wie üblich war es nur mir, Fehler zu machen und nicht fangen es sofort, weil ich an der falschen Stelle suchen.
Das Problem lag an meiner Tabelle Vererbung und die Konfiguration auf Datenbank-Ebene. Ich hatte die untergeordnete Tabelle (UserAdmin) foreign-key-Feld definiert, eine Identität, die dann tauchte in mein model StoreGeneratedPattern = Identität. Dies führte dazu, dass die 'Ein Element mit dem gleichen Schlüssel wurde bereits Hinzugefügt "Fehler", wenn die EF wurde versucht zu propagieren, die die Eltern-primär-Schlüssel-Kind-foreign-key-Feld.
Einmal habe ich entfernt, die Identität der Spezifikation aus der UserAdmins Tabelle das Problem ging Weg.
Problem gelöst.
Ja genau das ist das problem. Wie hast du membershipUser-Entität? Wenn Sie nicht bekommen, aus der aktuelle ObjectContext EF denkt, dass es das neue ein und versucht, stecken Sie es an Tabelle aspnet_users.
Versuchen Sie, diesen code nach dem hinzufügen der Benutzer zu ObjectSet:
Therea wahrscheinlich einige andere Möglichkeiten, wie Sie erreichen dasselbe Ergebnis, aber das funktioniert für mich.