Правка: Обновлено описание проблемы по результатам тестирования - 12 сентября 2011 года.
У меня есть запрос, который бросает NotSupportedException ("Указанный метод не поддерживается.") всякий раз, когда я вызываю .ToList().
IQueryable query = db
.FileDefinitions
.Include(x => x.DefinitionChangeLogs)
.Include(x => x.FieldDefinitions.Select(y => y.DefinitionChangeLogs)) // bad
.Include(x => x.FieldDefinitions.Select(y => y.FieldValidationTables)) // bad
.Where(x => x.IsActive);
List retval = query.ToList();
Если я прокомментирую любую из строк, которые я прокомментировал как "плохие", то запрос работает. Я также попытался включить различные вложенные сущности в мою объектную модель с тем же эффектом. Включение любых 2 приведет к аварийному завершению. Под вложенным я понимаю навигационное свойство свойства навигации. Также я попробовал использовать методы .Include со строковым путем: тот же результат.
Моя структура таблиц выглядит следующим образом:
Это использование MySQL 5.1 (очевидно, таблицы InnoDB) в качестве хранилища баз данных с коннектором MySQL/NET 6.3.4.
Итак, мой вопрос: почему это не работает?
Примечание: Я могу заставить это работать, если я явно загружу связанные объекты, как в по этой ссылке . Но я хочу знать, почему EF ненавидит мою модель данных.
ОТВЕТ: Очевидно, что MySQL Connector не способен обрабатывать вложенную 2-ю сущность include. Он бросает NotSupportedException, а не .NET EF. Эта же ошибка присутствовала и при попытке использования EF4.0, но мои исследования в то время заставили меня поверить, что проблема заключается в самослеживающихся сущностях. Я попытался обновить коннектор до последнего, но это начало вызывать ошибку Out of Sync . Это еще одна причина , по которой я ненавижу MySQL.