指定的包含路径无效.EntityType不声明名称为*的导航属性

Jaz*_*ter 38 c# linq entity-framework

我正在尝试从LocalDb获取数据到我的MVC控制器.我试过这个:

UsersContext db = new UsersContext();
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId)
                           .Include(u => u.LastName).ToList();
Run Code Online (Sandbox Code Playgroud)

它返回此错误:

指定的包含路径无效.EntityType"ChatProj.Models.UserProfile"未声明名称为"LastName"的导航属性.

这是我的localDb和模型的图片.

知道为什么它不起作用吗?

Ser*_*kiy 37

导航属性应该是相关实体集合的实体类型.包括一些导航属性意味着加入了一些相关的实体或实体的当前实体.这允许在单个查询中从几个表中急切加载数据.LastName不是导航属性 - 它是简单的字段,默认情况下会加载,您不需要包含它:

UsersContext db = new UsersContext();
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId)
                           .ToList();
Run Code Online (Sandbox Code Playgroud)

此查询将被翻译成类似的内容

SELECT UserId, UserName, LastName, FirstName 
FROM UserProfiles
WHERE UserId = @value
Run Code Online (Sandbox Code Playgroud)

  • @JazzMaster欢迎:)考虑阅读[导航属性](http://msdn.microsoft.com/en-us/data/jj713564.aspx) (2认同)

Tho*_*que 21

Include仅用于导航属性,并且LastName是标量属性,因此您根本不需要Include.


Ser*_*gan 16

虽然这与问题并不完全相关,但是由于谷歌将你带到这里,我认为可能有必要注意到IEnumerable你的收藏可能是你的用途.相反,您应该使用ICollection,请在此处查看更多信息:https://stackoverflow.com/a/32997694/550975


Rap*_*aus 6

如果您只想检索LastName,请使用

Select(m => m.LastName)
Run Code Online (Sandbox Code Playgroud)

所以

 var users = db.UserProfiles
                .Where(u => u.UserId == WebSecurity.CurrentUserId)
                .Select(u => u.LastName)//not Include
                .ToList();
Run Code Online (Sandbox Code Playgroud)

LastName 只是模型中的字符串(Scalar属性),而不是Navigation属性(与另一个实体的关系)