現在、localhost の WampServer で MySQL データベースを実行しています。いくつかのクラスがあり、POCO クラスを使用してそれらをデータベース テーブルにマップしました。
標準として、すべての作成、編集、および削除を処理するためのリポジトリがあります。このリポジトリに質問オブジェクトを渡します。この質問オブジェクトには、id、text などの基本的なプロパティがあり、その質問に対するすべての回答にリンクするためのナビゲーション プロパティも含まれています。
question の poco クラスでは、すべての回答が ICollection として保存されます。これは何週間も問題なく更新、削除、作成できるように機能しています。
突然、質問を編集しようとすると、回答が指数関数的に重複し、2 が 4 になり、8 になりました。この問題を解決しようとしていたため、気が付く前に約 60,000 の回答がありました。
質問を編集するためのリポジトリ内のコード:
public void EditQuestion(Question question)
{
var tempquestion = Context.Questions.Single(q => q.Question_Id == question.Question_Id);
tempquestion.Question_Help = question.Question_Help;
tempquestion.Question_Text = question.Question_Text;
tempquestion.Question_Type = question.Question_Type;
context.SaveChanges();}
すべての行にブレークポイントを設定してこれを何度も繰り返し、回答プロパティを確認しました。プロセス全体で正しい番号のままであり、context.saveChanges() にヒットし、その結果をキャッチすると、突然複製されました。 .
詳細なメモと要求されたコード:
はい、これにはエンティティ フレームワークを使用しています。指定する必要がありました。
質問に対する私の poco クラスは次のとおりです。
public int Question_Id { get; set; }
public string Question_Text { get; set; }
public string Question_Help { get; set; }
public string Question_Type { get; set; }
[Display(Name = "Set ID")]
public int Set_Id { get; set; }
public Set Set { get; set; }
private ICollection<Answer> _answers;
public ICollection<Answer> Answers
{
get
{
if (_answers == null)
{
_answers = Arep.GetAnswers(this.Question_Id);
}
return _answers;
}
set
{
_answers = value;
}
} //a collection of answers belonging to this question
EDIT 2:私は今、本当の問題に大きく近づいていると思います。CodeCaster からの役立つリンクのおかげで、最後のクエリをチェックしました。2 つの回答がある場合、2 つの挿入ステートメントしか実行されません。回答が編集された質問と一緒に渡されたとき、これは以前には起こりませんでした。
修正が、編集された質問とそれに関連付けられていない回答を送信することになることを願っています。そのようにして、新しい質問が挿入されたり、重複が作成されたりすることはありません。