【问题标题】:Updating a many to many table. Table does not exist in MVC更新多对多表。 MVC 中不存在表
【发布时间】:2015-04-05 02:24:35
【问题描述】:

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

QuestionGroups
PK - QuesitonGroupID

Questions
PK - QuestionID

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

QuestionGroupQuestions
PK - QuestionGroupID
PK - QuestionID

Answers
PK - AnswerID

这张表我可以正确更新这张表

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);

上面的代码正在运行。我不想更新 QuestionGroup 表。我只想更新 QuestionGroupQuestions 表。

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

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

更新前已有2条记录

QuestionGroupID, QuestionID
14,1
14,3

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

{"违反 PRIMARY KEY 约束 'PK_QuestionGroupQuestions'。无法在对象 'dbo.QuestionGroupQuestions' 中插入重复键。重复键值为 (14, 1)。\r\n语句已终止。"}

【问题讨论】:

  • 听起来你已经和那个 PK 争吵了;不?你需要删除那些吗?

标签: c# sql asp.net-mvc model-view-controller


【解决方案1】:

当映射具有多对多关系的表时(QuestionGroups 和 Questions),拥有相关 ID 的表(QuestionGroupQuestions)不会映射到任何实体,而是映射到另一个拖表对于具有多对多关联的实体,关联是它们内部相互实例的集合,当保存这些两个表的任何有效更改时,EF 会自动更新第三个表 (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 表也应该会更新。

【讨论】:

  • 我现在明白了。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 2015-02-04
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多