更新多对多 table。 Table MVC 中不存在

Updating a many to many table. Table does not exist in MVC

我在更新 edmx 图表中不存在的多对多 table 时遇到问题。

QuestionGroups
PK - QuesitonGroupID

Questions
PK - QuestionID

edmx 中不存在此 table:我无法更新此 table

QuestionGroupQuestions
PK - QuestionGroupID
PK - QuestionID

Answers
PK - AnswerID

这个table我可以正确更新这个table

QuestionAnswers
PK - QuestionID
PK - AnswerID

代码在这里

    public ActionResult Create(int questionGroupID, QuestionVM questionVM)
    {
        Mapper.CreateMap<Question, QuestionVM>();

        Question question = Mapper.DynamicMap<Question>(questionVM);

        if (question.Answers != null)
        {
            question.Answers = new List<Answer>();
            foreach (var answer in questionVM.Answers)
            {
                var questionAnswerToAdd = db.Answers.Find(answer.AnswerID);
                question.Answers.Add(questionAnswerToAdd);
            }
        }

        db.Questions.Add(question);
        db.SaveChanges();


        var questionGroup = db.QuestionGroups.Find(questionGroupID);
        questionGroup.Questions.Add(question);

        db.QuestionGroups.Add(questionGroup);

以上代码有效。我不想更新问题组 table。我只想更新 QuestionGroupQuestions table.

        db.Entry(questionGroup).State = EntityState.Unchanged;
        db.SaveChanges();

        return RedirectToAction("Index", "Question");
    }

更新前已有2条记录

QuestionGroupID, QuestionID
14,1
14,3

添加新问题时收到此错误消息

{"Violation of PRIMARY KEY constraint 'PK_QuestionGroupQuestions'. Cannot insert duplicate key in object 'dbo.QuestionGroupQuestions'. The duplicate key value is (14, 1).\r\nThe statement has been terminated."}

当映射 table 具有多对多关系(QuestionGroupsQuestions)时,table 包含相关 ID(QuestionGroupQuestions ) 不映射到任何实体,取而代之的是另一个 table 映射到具有多对多关联的实体,关联是它们内部彼此的实例集合,并且在保存任何有效更改时在这些 table 中,EF 会自动更新第三个 table (QuestionGroupQuestions),因此不需要更新 QuestionGroupQuestions。

var questionGroup = db.QuestionGroups.Find(questionGroupID);
questionGroup.Questions.Add(question);
//The problem is here that you are adding questionGroup again. comment it and check
//db.QuestionGroups.Add(questionGroup); this cause a error, questionGroup already exists

现在,如果您保存对 db 的更改,QuestionGroupQuestions table 也应该得到更新。