Bro*_*Dev 8 .net linq linq-to-entities entity-framework entity-framework-4
我有一个与asp.net成员资格提供者用户表具有外键关系的实体.
这部分模型如下所示:

在插入Users表记录时,我似乎无法分配外键关系,该记录包含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();
Run Code Online (Sandbox Code Playgroud)
问题是我要求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();
Run Code Online (Sandbox Code Playgroud)
此代码生成错误:
已添加具有相同键的项目.
Bro*_*Dev 10
好的,我想出了这个.像往常一样,只是我犯了一个错误而没有马上抓住它,因为我看错了地方.
问题是由于我的表继承和数据库级别的配置.我将子表(UserAdmin)外键字段定义为标识,然后在我的模型中显示为StoreGeneratedPattern = Identity.当EF试图将父级主键传播到其子级的外键字段时,这导致"具有相同键的项目已添加错误".
一旦我从UserAdmins表中删除了身份规范,问题就消失了.
问题解决了.
| 归档时间: |
|
| 查看次数: |
24981 次 |
| 最近记录: |