デバッガーを使用してコードをステップ実行するか、アプリを実行する (再生を押す) と、実際には異なる結果が得られる、非常に奇妙な動作があります。
モデルは次のようになります。
public class QuestionPack
{
public int QuestionPackID { get; set; }
public string Hashcode { get; set; }
public virtual ICollection<Question> Questions { get; set; }
}
そして、このようなリポジトリ パターンを使用して、このクラスを DB に保存します。
public class EFQuestionPackRepository : IQuestionPackRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<QuestionPack> QuestionsPacks
{
get { return context.QuestionPacks; }
}
public void SaveQuestionPack(QuestionPack questionpack)
{
if (questionpack.QuestionPackID == 0)
{
context.QuestionPacks.Add(questionpack);
}
else
{
QuestionPack dbEntry = context.QuestionPacks.Find(questionpack.QuestionPackID);
if (dbEntry != null)
{
dbEntry.Hashcode = questionpack.Hashcode;
dbEntry.Questions = questionpack.Questions;
}
}
context.SaveChanges();
}
}
これは、データを追加するときに完全に機能しますが、更新しようとすると (else ステートメント)、質問が二重になります。質問は保存されますが、既に保存されている質問があるため、4 つの質問がある場合、その質問を 1 つの質問で更新して保存すると、最終的に 9 つの質問になります。
しかし; デバッガーを使用してコードをステップ実行すると (SaveQuestionPack 関数から開始し、context.saveChanges() の後で「続行」をクリックすると、期待どおりの結果が得られます。混乱していて、どこを見ればよいかさえわかりません。コレクションを保存しようとしているという事実と関係があると思いますが、保存プロセスを実行すると機能するのはなぜですか?
どんな入力でも大歓迎です。