如果我使用调试器单步执行代码或仅运行应用程序(按播放),我有一个非常奇怪的行为实际上会给我不同的结果。
模型看起来像这样;
public class QuestionPack
{
public int QuestionPackID { get; set; }
public string Hashcode { get; set; }
public virtual ICollection<Question> Questions { get; set; }
}
我使用这样的存储库模式将此类保存到数据库中;
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 个问题,用一个问题更新那个问题并保存,我最终会得到 9 个问题。
但; 如果我使用调试器逐步执行代码(从 SaveQuestionPack 函数开始并在 context.saveChanges() 之后点击“继续”,我会得到预期的结果。我很困惑,我什至不知道从哪里开始寻找.我想这与我试图存储一个集合的事实有关,但是为什么当我逐步完成保存过程时它会起作用?
任何输入表示赞赏。