Запрос на класс унаследованной сущности не работает - PullRequest
1 голос
/ 16 декабря 2011

Когда я делаю запрос:

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 для иерархии. Модель производителя:

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"));

Edit:

Это также ничего не возвращает:

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

1 Ответ

0 голосов
/ 20 декабря 2011

Я на 100% уверен, что в этих классах есть ученики StudentClasses.

Я на 99% уверен, что нет.(1% для потенциального случая, когда вы обнаружили серьезную ошибку EF.) Если в классах есть ученики с Class.TermId == 1 и Class.SubFormId == 1, ваш запрос должен вернуть этих учеников.

Ваш тестовый запрос ...

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

... не имеет ничего общего с вашим исходным запросом.Это говорит только о том, что в таблице StudentClasses есть хотя бы одна строка с Class.TermId == 1 и Class.SubFormId == 1.

Это не доказывает, что у вас есть ученик, который находится в этом конкретном классе (или вэти конкретные классы, если существует более одного класса с Class.TermId == 1 и Class.SubFormId == 1).Все ваши ученики могут быть в других классах, и ваш исходный запрос будет правильно возвращать ни одного ученика в результате.Таким образом, это ни в коем случае не совпадает с (context.)Users.OfType<Student>().Where(u => true).

Если вы все еще на 100% уверены, что вам следует показать содержание ваших таблиц в небольшом примере, чтобы сделать проблему воспроизводимой для нас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...