C# 指定的包含路径无效。EntityType未声明名称为的导航属性*
我正试图将本地数据库中的数据输入我的MVC控制器。我试过这个:C# 指定的包含路径无效。EntityType未声明名称为的导航属性*,c#,linq,entity-framework,C#,Linq,Entity Framework,我正试图将本地数据库中的数据输入我的MVC控制器。我试过这个: UsersContext db = new UsersContext(); var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId) .Include(u => u.LastName).ToList(); 它返回以下错误: 指定的包含路径无效。实体类型 “ChatPro
UsersContext db = new UsersContext();
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId)
.Include(u => u.LastName).ToList();
它返回以下错误:
指定的包含路径无效。实体类型
“ChatProj.Models.UserProfile”未声明导航属性
名为“LastName”
知道它为什么不工作吗?导航属性应该是相关实体集合的实体类型。包括一些导航属性意味着将当前实体与一些相关实体连接起来。这允许在单个查询中从多个表中快速加载数据
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
Include
仅用于导航属性,而LastName
是标量属性,因此您根本不需要Include
。如果您只想检索LastName
,请使用
Select(m => m.LastName)
所以
LastName
在您的模型中只是一个字符串(标量属性),而不是一个导航属性(与另一个实体的关系)尽管这与问题不太相关,因为Google将您带到这里,我认为注意到一种可能的情况可能会有所帮助,即您正在为您的收藏使用IEnumerable
。相反,您应该使用ICollection
,请参阅此处的更多信息:
这似乎是
EF6
中的一个问题,可能只是早期版本的问题。。。在EF-Core
中使用已不再是一个问题了干杯,回答得好@爵士乐欢迎:考虑阅读关于@ SergyBeleZovsKy,你介意看一下我的问题吗?所以,没有办法避免总是在用户配置文件中加载所有属性?我自己说得再好不过了。非常简洁。直到我看到你的答案,我才知道我的错误是从哪里来的。说够了+1我建议您浏览此帖子>
var users = db.UserProfiles
.Where(u => u.UserId == WebSecurity.CurrentUserId)
.Select(u => u.LastName)//not Include
.ToList();