我在Entity Framework 5中有一个奇怪的行为
我使用以下代码加载实体“问题”(以及用户给出的答案和结果),然后我测试所有问题是否都有答案数量(第1轮和第2轮的4个答案)问题和第3轮问题的1个答案):
var round1Questions = Entities.Questions.Where(q => q.Round == 1)
.OrderBy(r => Guid.NewGuid()).Take(numOfQuestions).ToList();
var round2Questions = Entities.Questions.Where(q => q.Round == 2)
.OrderBy(r => Guid.NewGuid()).Take(numOfQuestions).ToList();
var round3Questions = Entities.Questions.Where(q => q.Round == 3)
.OrderBy(r => Guid.NewGuid()).Take(numOfQuestions).ToList();
/* ==== BEGIN TEST ==== */
foreach (var q in round1Questions)
{
if ((q.Round != 3 && q.Answers.Count != 4) || (q.Round == 3 && q.Answers.Count != 1))
throw new InvalidDataException("This question has less answers than it should");
}
/* ==== END TEST ==== */
/* ==== BEGIN TEST ==== */
foreach (var q in round2Questions)
{
if ((q.Round != 3 && q.Answers.Count != 4) || (q.Round == 3 && q.Answers.Count != 1))
throw new InvalidDataException("This question has less answers than it should");
}
/* ==== END TEST ==== */
/* ==== BEGIN TEST ==== */
foreach (var q in round3Questions)
{
if ((q.Round != 3 && q.Answers.Count != 4) || (q.Round == 3 && q.Answers.Count != 1))
throw new InvalidDataException("This question has less answers than it should");
}
/* ==== END TEST ==== */
如您所见,我运行测试来验证数据。 上面的代码完美无缺:不会抛出任何异常。
然而,如果我使用实体“Answers”和“GameResults”的早期加载(测试不需要它但在其他地方使用它),则某些行的测试失败。这是为什么? 这是“破碎的”代码:
var round1Questions = Entities.Questions.Include("Answers").Include("GamesResults")
.Where(q => q.Round == 1).OrderBy(r => Guid.NewGuid())
.Take(numOfQuestions).ToList();
var round2Questions = Entities.Questions.Include("Answers").Include("GamesResults")
.Where(q => q.Round == 2).OrderBy(r => Guid.NewGuid())
.Take(numOfQuestions).ToList();
var round3Questions = Entities.Questions.Include("Answers").Include("GamesResults")
.Where(q => q.Round == 3).OrderBy(r => Guid.NewGuid())
.Take(numOfQuestions).ToList();
/* Omitted the test code because it's the same as above */
PS:它总是在某些行的第一次测试失败但不是全部。数据模型由Visual Studio使用设计器自动生成。
更新