【发布时间】:2013-07-04 17:05:19
【问题描述】:
我有一个用户表和一个角色表。有一个自动生成的 UsersRoles 链接表,其中包含来自 User 和 Roles 表的 Id。这是使用以下代码生成的:
modelBuilder.Entity<User>()
.HasMany(u => u.Roles)
.WithMany(r => r.Users)
.Map(c => {
c.MapLeftKey("UserId");
c.MapRightKey("RoleId");
c.ToTable("UsersRoles");
});
当我尝试添加不相关的实体并调用 Context.SaveChanges() 时,我收到以下错误:
违反主键约束“PK_UsersRoles”。无法插入 对象“dbo.UsersRoles”中的重复键。重复键值为 (2beaf837-9034-4376-9510-b1609c54efbe, dcd16d00-d46e-4d48-8328-3e7b35b11ccf)。该声明已 终止。
我已经检查了Conext.ChangeTracker.Entries() 错误中提到的项目,并且实体状态被标记为未更改。
唯一标记为已添加的实体是我尝试添加的新记录,其他所有内容都标记为未更改。
添加实体的代码:
RoleGroup group = Context.RoleGroups.Create();
group.Title = roleGroupName;
Context.Set<RoleGroup>().Add(group);
Context.SaveChanges();
有人知道为什么会这样吗?
【问题讨论】:
-
您应该发布将实体添加到上下文的代码
-
您能准确地显示您检查过的内容吗?我怀疑您只验证了
Role和User实体没有改变。 -
感谢您的提问,我已更新我的问题以添加更多信息。希望这会有所帮助。
-
你的意思是
Context.Set<RoleGroup>().Add(group);? -
我还是不明白。添加 RoleGroup 如何导致不相关的 UserRoles 表中的主键冲突?
标签: c# .net entity-framework ef-code-first