MVCとEntity Frameworkを使用してレコードを挿入しようとすると助けが必要です。私は多くの質問を含むことができる動的に作成されたフォームを持っています。編集時には、既存の回答を削除して成功し、新しい回答を挿入します。MVC Entity Framework - データの挿入 - ReferentialConstraintの依存プロパティがストア生成カラムにマッピングされる
私は、次のようなエラーになっています:
をIDENTITY_INSERTがOFFに設定されているときに「tblModeratorReportAnswers」テーブルにID列の明示的な値を挿入することはできません。
私はDbContextクラス
modelBuilder.Entity<QuestionAnswer>().Property(p => p.AnswerID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
に以下の行を追加した場合、私はこのエラーを取得する:
ReferentialConstraintで依存プロパティは、ストア生成された列にマッピングされています。列: 'AnswerID'。
はここで更新
//
// POST: /Home/Edit/1
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(FormCollection formCollection, int moderatorReportId)
{
ModeratorReport reportToEdit = repository.GetModeratorReportById(moderatorReportId);
List<QuestionAnswer> originalReportAnswers = repository.GetAllModeratorReportAnswers(moderatorReportId).ToList();
foreach (QuestionAnswer answer in originalReportAnswers) {
repository.DeleteAnswer(answer);
}
repository.Save();
int sectionID;
int questionID;
foreach (string key in formCollection.AllKeys)
{
var value = formCollection[key.ToString()];
Match m = Regex.Match(key, "section(\\d+)_question(\\d+)");
if (m.Success) {
QuestionAnswer newAnswer = new QuestionAnswer();
sectionID = Convert.ToInt16(m.Groups[1].Value.ToString());
questionID = Convert.ToInt16(m.Groups[2].Value.ToString());
newAnswer.ModeratorReportID = moderatorReportId;
newAnswer.QuestionID = questionID;
newAnswer.Answer = value;
repository.AddAnswer(newAnswer);
}
}
repository.Save();
reportToEdit.Status = "SUBJECTOFFICER SAVED";
AuditItem auditItem = new AuditItem();
auditItem.ModeratorReportID = moderatorReportId;
auditItem.Status = "SUBJECTOFFICER SAVED";
auditItem.AuditDate = DateTime.Now;
auditItem.Description = "The Moderator report ID: " + moderatorReportId + " was saved.";
auditItem.UserID = User.Identity.Name;
db.Audit.Add(auditItem);
repository.Save();
return RedirectToAction("Details", new { id = moderatorReportId });
}
をやっている私のコードです...そして、私のリポジトリに
//
// Persistance
public void Save()
{
db.SaveChanges();
}
public void AddAnswer(QuestionAnswer answer)
{
db.Answers.Add(answer);
Save();
}
public void DeleteAnswer(QuestionAnswer answer)
{
db.Answers.Attach(answer);
db.Answers.Remove(answer);
}
は、私はまた、すべての私の主キー、外部キーチェックしていると、彼らはすべてOKです。主キーはすべて「アイデンティティ」に設定されています。
私はこの問題を一日中解決しようとしています。私はそれを解決するために何をすべきか分かりません。誰かが私の助言を与えることができれば、それは非常に高く評価されるだろう。
ご回答ありがとうございます。なぜ私のコードのどこにでも 'AnswerID'を設定していないので、最初のエラーが出ていた理由は分かりません。私のコードをステップ実行するときにプロパティの上にマウスを移動すると、値は0になります。これが問題の原因になりますか?私は解決策を探してDbContextの行を追加しましたが、これは可能な解決策として提案されました。 –
外部キーとしてID列を削除しましたが、まだエラーメッセージが表示されています。他に何ができるのか分かりますか?私は完全にこの1つに困惑しています。 –