Поскольку этот вопрос является лучшим результатом поиска для "Entity Framework Включить не работает", я просто упомяну пару других возможностей, хотя ни одна из них не имеет отношения к исходному сообщению @ Dismissile.
Чувствительность к регистру
SQL Server (и, возможно, другие платформы баз данных) часто работают без учета регистра.Таким образом, если у вас есть значение первичного ключа ABC1, база данных примет ABC1, abc1, AbC1 и т. Д. В качестве допустимых значений внешнего ключа.Тем не менее, сравнения строк .Net по умолчанию чувствительны к регистру, поэтому даже если ваш .Include генерирует дополнительный SQL для извлечения дополнительных значений в EF, он может не заполнить дочерние объекты, если в ключах есть регистр.Это обсуждается немного глубже в этом ТАК вопрос с парой хороших ссылок.Использование чувствительной к регистру сортировки для столбцов первичного ключа и внешнего ключа может снизить риск этой причины сбоя .Include.
Пробелы в конце
Это одна из причиня потерял день своей жизни, пытаясь понять, почему мой .Include не работал.SQL Server (и, возможно, другие платформы баз данных) часто игнорируют конечные пробелы при сравнении строк.Таким образом, если у вас есть значение первичного ключа (не включая кавычки) «ABC» (один конечный пробел), база данных примет «ABC» (один пробел), «ABC» (без пробела), «ABC» (2 пробела)) и т. д. в качестве допустимых значений внешнего ключа.Однако при сравнении строк .Net не игнорируются конечные пробелы, поэтому даже если ваш .Include генерирует дополнительный SQL для извлечения дополнительных значений в EF, он может не заполнить дочерние объекты, если в ключах есть различия в конечных пробелах.Поведение SQL Server описано на этой странице MS Support .Я не разработал хорошую стратегию предотвращения такого рода сбоев. Включите, кроме тщательного управления данными, то есть не позволяйте пользователям вводить значения внешнего ключа - используйте выпадающий список или неукоснительно вводите пользовательский ввод.