实体框架失败,因为同一类型的另一个实体已具有相同的主键值。在外键上

时间:2016-01-20 05:22:04

标签: c# entity-framework

当我运行以下代码时,我得到了

try {
    var questionRepo = new QuestionRepository(db);
    var question = new Question();

    question.QuestionText = text;
    question.QuestionCategory = SelectedQuestionCategory;
    db.QuestionCategory.Attach(SelectedQuestionCategory);

    //Tried adding 
    //db.Entry(question).State = System.Data.Entity.EntityState.Added;

    questionRepo.Add(question);
    db.SaveChanges();
} catch (Exception ex) {
    Debug.WriteLine(ex.Message);
    return;
}
当我以前没有使用QuestionCategory时,没有错误,但如果我有错误,我会收到错误。

错误仅显示我的数据库中已经有相同选定SelectedQuestionCategory的问题。我仔细检查了数据库,Question的主键位于id列,而不是QuestionCategory

我得到的错误是:

  

附加类型为' QuestionCategory'的实体失败   因为同一类型的另一个实体已经具有相同的主要实体   核心价值。

当外键不是组合主键或主键时,为什么它在同等外键上失败?

2 个答案:

答案 0 :(得分:1)

可能在您添加问题实体框架尝试将另一个新的QuestionCategory实例添加到附加到问题的DB时。 尝试使用Id 更改QuestionCategory的对象状态。

/

答案 1 :(得分:0)

首先,问题似乎是关于QuestionCategory的PK而不是问题。 SelectedQuestionCategory是如何设置的?你是否用你想要的值新建了一个QuestionCategory实例?如果是这样,您无意中尝试使用相同的PK添加第二个实例。在这种情况下,您最好从db.QuestionCategory中检索现有实例,因为您已经拥有了DbContext。