我正面临一个奇怪的问题,我称之为schrodinger错误。我有一个实体框架查询我使用Linq在运行时返回一些东西,但是当我调试它返回其他东西。
我正在按ID搜索表格实体列表中的项目。我在执行查询后在行中添加了一个断点,并在第一次运行时返回一个id应该与id“-1”匹配的对象。但是我没有在该表中将任何Id设置为“-1”id。如果我将执行指针带回查询并再次执行它,则返回预期值:null。 我在这里添加了几个调试器的屏幕截图,以使其更清晰。
第一遍:
第二遍:
正如您在第一个屏幕截图中看到的那样,要搜索的ID设置为“-1”,但返回的对象的ID设置为“18”。
这是一个更完整的剪辑导致错误的代码。
foreach (var answer in question.Answers)
{
if (answer.Sentence != null)
{
var a = q.Answers.FirstOrDefault(x => x.Id == answer.Id);
if (a == null || answer.Id == -1)
{
if (q.Answers == null)
q.Answers = new List<Answer>();
a = new Answer();
q.Answers.Add(a);
}
a.IsRight = answer.IsRight;
var id = answer.Sentence.Id;
var qryResult = dataContext.Sentences.Where(s => s.Id == id);
a.Sentence = qryResult.Any() ? qryResult.First() : null;
if (a.Sentence == null)
{
a.Sentence = new Sentence()
{
Text = answer.Sentence.Text,
IsQuestion = false
};
}
}
}
根据要求,以下是实体模型:
public class Exam
{
public int Id { get; set; }
public string Description { get; set; }
public DateTime Date { get; set; }
public virtual ICollection<Question> Questions { get; set; }
}
public class Question
{
[Key]
public int Id { get; set; }
public virtual Sentence Sentence { get; set; }
public virtual ICollection<Answer> Answers { get; set; }
public virtual Answer GivenAnswer { get; set; }
}
public class Answer
{
[Key]
public int Id { get; set; }
public virtual Sentence Sentence { get; set; }
public bool IsRight { get; set; }
}
public class Sentence
{
[Key]
public int Id { get; set; }
public string Text { get; set; }
public bool IsQuestion { get; set; }
public string RelatedTopics { get; set; }
}