J'essaie d'obtenir des données d'un LocalDb dans mon contrôleur MVC. J'ai essayé ceci:
UsersContext db = new UsersContext();
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId)
.Include(u => u.LastName).ToList();
Il renvoie cette erreur:
Un chemin d'inclusion spécifié n'est pas valide. L'EntityType 'ChatProj.Models.UserProfile' ne déclare pas une propriété de navigation avec le nom 'LastName'.
Voici une photo de mon localDb et de mon modèle.
Une idée pourquoi ça ne marche pas?
La propriété de navigation doit être de type entité de collection d'entités liées. Inclure une propriété de navigation signifie joindre votre entité actuelle avec une ou plusieurs entités liées. Cela permet un chargement rapide des données de plusieurs tables en une seule requête. LastName
n'est pas une propriété de navigation - c'est un champ simple, et il sera chargé par défaut, vous n'avez pas besoin de l'inclure:
UsersContext db = new UsersContext();
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId)
.ToList();
Cette requête sera traduite en quelque chose comme
SELECT UserId, UserName, LastName, FirstName
FROM UserProfiles
WHERE UserId = @value
Include
est uniquement pour les propriétés de navigation et LastName
est une propriété scalaire, vous n'avez donc pas besoin de Include
du tout.
Même si ce n'est pas tout à fait lié à la question, puisque Google vous amène ici, j'ai pensé qu'il pourrait être utile de remarquer qu'une possibilité probable est que vous utilisez IEnumerable
pour votre collection. Au lieu de cela, vous devriez utiliser ICollection
, voir plus ici: https://stackoverflow.com/a/32997694/550975
Cela semble être un problème dans EF6
et peut-être des versions antérieures seulement ... ce n'est plus un problème à utiliser dans EF Core
.
Si vous souhaitez récupérer uniquement le LastName
, utilisez
Select(m => m.LastName)
alors
var users = db.UserProfiles
.Where(u => u.UserId == WebSecurity.CurrentUserId)
.Select(u => u.LastName)//not Include
.ToList();
LastName
n'est qu'une chaîne (propriété scalaire) dans votre modèle, pas une propriété Navigation (relation avec une autre entité)