Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定的包含路径无效。EntityType未声明名称为的导航属性*_C#_Linq_Entity Framework - Fatal编程技术网

C# 指定的包含路径无效。EntityType未声明名称为的导航属性*

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

我正试图将本地数据库中的数据输入我的MVC控制器。我试过这个:

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();