对继承的实体框架类的查询不起作用

时间:2011-12-16 17:40:42

标签: entity-framework entity-framework-4.1

当我进行查询时:

Users.OfType<Student>().Where(u => u.StudentClasses.Any(sc => sc.Class.TermId == 1 && sc.Class.SubFormId == 1))

我一无所获。但是这个查询返回true:

StudentClasses.Any(sc => sc.Class.TermId == 1 && sc.Class.SubFormId == 1)

所以基本上这与:

相同
Users.OfType<Student>().Where(u => true)

返回所有学生。所以OfType<Student>有效。

我100%确定这些班级中有学生StudentClasses,但由于某种原因,虽然子查询返回true,但我没有找回学生。

Student继承自User,但Student只有StudendClass。这个查询会出现什么问题?

我基本上希望学生使用特定的子表单/术语(所有这些属性都在Class

我正在使用Table perhechy。模型构建者:

modelBuilder.Entity<User>()
            .Map<Teacher>(m => m.Requires("UserType").HasValue("Teach"))
            .Map<Student>(m => m.Requires("UserType").HasValue("Stu"))
            .Map<Staff>(m => m.Requires("UserType").HasValue("Staff"));

编辑:

这也不会返回任何内容:

Users.OfType<Student>().Where(u => u.StudentClasses.Any(sc => true))

1 个答案:

答案 0 :(得分:0)

  

我百分百肯定这些班级里有学生StudentClasses。

我99%肯定没有。 (对于您发现一些严重的EF错误的潜在案例,1%。)如果有Class.TermId == 1Class.SubFormId == 1的班级的学生,您的查询必须返回这些学生。

您的测试查询...

(context.)StudentClasses.Any(sc => sc.Class.TermId == 1 && sc.Class.SubFormId == 1)

...与原始查询无关。它只表示StudentClasses表格中至少有一行Class.TermId == 1Class.SubFormId == 1

它不能证明您有任何学生在这个特定班级(或者如果有多个班级有Class.TermId == 1Class.SubFormId == 1,则在这些特定班级)。您的所有学生都可以在其他课程中,您的原始查询将正确地返回没有学生的结果。因此,这与(context.)Users.OfType<Student>().Where(u => true)完全相同。

如果你仍然100%确定你应该在一个小例子中显示你的表的内容,以使问题可以为我们重现。