我有一个名为Users
的实体,以及一个名为Groups
的实体。
我已经在我的数据库中限制了几个组,但没有用户。我正在尝试添加用户,并为他们配置组,但我收到以下错误:
违反PRIMARY KEY约束'PK_dbo.Groups'。无法插入 对象'dbo.Groups'中的重复键。重复的键值是 (管理员)。声明已经终止。
实体定义如下(某些信息被删除)
public class User{
[Key, Column(Order = 0)]
public string Name {get;set;}
[ForeignKey("Organization")]
[Key, Column(Order = 1)]
public string Organization {get;set;}
public virtual Organization Org {get;set;}
public virtual ICollection<Group> Groups {get;set;}
}
public class Group {
[Key, Column(Order=0)]
public string GroupName {get;set;}
}
我错过了一些基本的东西吗?
我用来添加用户的代码:
var user = new User
{
Name = "NAME",
Organization = "Organization Name",
Org = orgObject,
Groups = LIST OF GROUPS // LIST OF GROUPS is an IList<Group> object
};
context.Users.Add(user);
context.SaveChanges();
答案 0 :(得分:1)
我的想法是因为List是在其他地方获得的,而不是从db上下文获得的,所以当它已经存在时,它会尝试重新添加它。那会准确吗?
正确。您必须将项目附加到当前的dbContext才能使其正常工作。
var user = new User
{
Name = "NAME",
Organization = "Organization Name",
Org = orgObject,
Groups = LIST OF GROUPS // LIST OF GROUPS is an IList<Group> object
};
foreach(var group in LIST OF GROUPS)
context.Groups.Attach(group);
context.Users.Add(user);
context.SaveChanges();