0

現在、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 つの挿入ステートメントしか実行されません。回答が編集された質問と一緒に渡されたとき、これは以前には起こりませんでした。

修正が、編集された質問とそれに関連付けられていない回答を送信することになることを願っています。そのようにして、新しい質問が挿入されたり、重複が作成されたりすることはありません。

4

2 に答える 2

0

問題が何であるかはわかりません。あなたの質問からそれを読み取ることができないため、これで問題が解決するかどうかはわかりませんが、POCO を次のようにします。

public class Question {
    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; }
    public virtual ICollection<Answer> Answers { get; set; }
}

回答には ID フィールドがありますか? EFで使用すると、そうなると思います。

于 2012-07-24T12:01:30.060 に答える
0

実行されたすべてのクエリをログに記録する方法に関する CodeCaster からの有益なヒントのおかげで、実際に正しい量が追加されていることがわかりました。

問題は、回答をまったく追加するべきではないという事実にありました。しかし、質問を更新するたびに質問プロパティに回答があったため、すべての回答が再追加されました! したがって、変更を保存するために正しい番号が表示されますが、後で間違った番号が表示されます。

ありがとうございました!

于 2012-07-24T12:22:36.213 に答える