实体框架早期加载不加载所有行的相关实体

时间:2013-11-08 16:24:29

标签: c# entity-framework

我在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使用设计器自动生成。

更新

  1. 我在每个集合上运行完全相同的测试(第1轮和第2轮应该 有4个答案。第3轮应该有1个答案。)
  2. 如果我不包括 调用“Include”方法时的“GamesResults”实体, 一切正常。
  3. 所以,只有当我同时包含“GamesResults”和“Answers”时才会出现问题。

0 个答案:

没有答案
相关问题