【发布时间】:2010-08-30 06:58:31
【问题描述】:
我有一个与 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();
此代码生成错误:
已添加具有相同密钥的项目。
【问题讨论】:
-
membershipUser是否被(相同的)DataContext 跟踪? -
是的,membershipUser 记录由用于提交新用户记录的同一实体模型实例检索。
标签: .net linq entity-framework linq-to-entities entity-framework-4