Dot-Net
實體框架 - 已添加具有相同鍵的項目。- 嘗試定義外鍵關係時出錯
我有一個與 asp.net 成員提供者使用者表有外鍵關係的實體。
模型的這一部分如下所示:
插入使用者表記錄時,我似乎無法分配外鍵關係,該記錄包含
aspnet_Users表的外鍵。我不斷收到錯誤:已添加具有相同密鑰的項目。
我正在使用的程式碼如下所示:
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();當該記錄已經存在時,我要求 EF 添加新
aspnet_Users表記錄(關聯主鍵表的記錄)的問題是什麼?如何將外鍵值分配給已經存在主鍵記錄的實體?
更新的測試程式碼塊:
MembershipUser membershipUser = Membership.CreateUser("blah@blah.com", "pass", "blah@blah.com"); 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();此程式碼生成錯誤:
已添加具有相同密鑰的項目。
好的,我想出了這個。像往常一樣,只是我犯了一個錯誤,沒有馬上抓住它,因為我找錯了地方。
問題是由於我的表繼承和數據庫級別的配置。我將子表的(UserAdmin)外鍵欄位定義為身份,然後在我的模型中顯示為 StoreGeneratedPattern = Identity。當 EF 嘗試將父項的主鍵傳播到其子項的外鍵欄位時,這會導致“已添加具有相同鍵的項目錯誤”。
一旦我從 UserAdmins 表中刪除了身份規範,問題就消失了。
問題解決了。
