2015-04-05 53 views
0

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

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声明已终止。“}

+0

听起来就像你已经与那个PK一行;没有?你需要删除这些? – ChiefTwoPencils 2015-04-05 02:32:08

回答

0

当mapp (QuestionGroupsQuestions),保存相关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表也应该得到更新。

+0

非常感谢。 – RThompson 2015-04-05 05:36:33

+0

我现在明白了。再次感谢。 – RThompson 2015-04-05 05:37:10