更新多对多 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 具有多对多关系(QuestionGroups
和 Questions
)时,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 也应该得到更新。
我在更新 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 具有多对多关系(QuestionGroups
和 Questions
)时,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 也应该得到更新。