更新集合时出现奇怪的DB上下文行为(在调试器中单步执行代码时工作)

时间:2013-08-20 05:40:46

标签: c# asp.net-mvc entity-framework dbcontext

我有一个非常奇怪的行为,如果我使用调试器单步执行代码或只是运行应用程序(按播放),实际上会给我不同的结果。

模型看起来像这样;

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个问题,用 ONE 问题更新该问题并保存,我将最终得到9个问题。

BUT;如果我使用调试器逐步执行代码(从SaveQuestionPack函数开始并点击&#34;继续&#34;,在context.saveChanges()&#34之后;我得到了预期的结果。我很困惑我不喜欢甚至不知道从哪里开始寻找。 我想这与我正在尝试存储集合的事实有关,但为什么当我逐步完成保存过程时它会起作用?

赞赏任何意见。

1 个答案:

答案 0 :(得分:0)

我想我解决了它,但我不确定它为什么会起作用......

我添加了这个;

dbEntry.Questions.Clear();

之前;

dbEntry.Questions = questionpack.Questions;

任何人都知道为什么要纠正错误?