实体框架重复关键问题

时间:2015-10-06 23:36:51

标签: c# entity-framework

我有一个名为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();

1 个答案:

答案 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();
相关问题