Указанный путь Include недействителен. EntityType не объявляет свойство навигации с именем *
Я пытаюсь получить данные из LocalDb в свой MVC-контроллер. Я пробовал это:
UsersContext db = new UsersContext();
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId)
.Include(u => u.LastName).ToList();
Он возвращает эту ошибку:
Указанный путь Include недействителен. EntityType 'ChatProj.Models.UserProfile' не объявляет свойство навигации с именем "LastName".
Вот изображение моего localDb и модели.
Любая идея, почему она не работает?
Ответы
Ответ 1
Навигационное свойство должно быть типа сущности коллекции связанных объектов. Включение некоторого свойства навигации означает присоединение к вашему текущему объекту с некоторыми связанными объектами или объектами. Это позволяет оперативно загружать данные из нескольких таблиц в один запрос. LastName
не является навигационным свойством - это простое поле, и оно будет загружено по умолчанию, вам не нужно включать его:
UsersContext db = new UsersContext();
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId)
.ToList();
Этот запрос будет переведен в нечто вроде
SELECT UserId, UserName, LastName, FirstName
FROM UserProfiles
WHERE UserId = @value
Ответ 2
Include
предназначен только для свойств навигации, а LastName
является скалярным свойством, поэтому вам не нужно Include
вообще.
Ответ 3
Несмотря на то, что это не совсем связано с вопросом, поскольку Google приводит вас сюда, я подумал, что было бы полезно заметить, что вероятнее всего, что вы используете IEnumerable
для своей коллекции. Вместо этого вы должны использовать ICollection
, подробнее здесь: fooobar.com/questions/66820/...
Это кажется проблемой в EF6
и, возможно, только в более ранних версиях... больше не проблема для использования ни в EF Core
.
Ответ 4
Если вы хотите получить только LastName
, используйте
Select(m => m.LastName)
так
var users = db.UserProfiles
.Where(u => u.UserId == WebSecurity.CurrentUserId)
.Select(u => u.LastName)//not Include
.ToList();
LastName
- это просто строка (свойство Scalar) в вашей модели, а не свойство Navigation (отношение с другим объектом)