Подтвердить что ты не робот

Указанный путь 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 и модели.

Любая идея, почему она не работает?

4b9b3361

Ответ 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 (отношение с другим объектом)