我正在尝试从LocalDb获取数据到我的MVC控制器.我试过这个:
UsersContext db = new UsersContext(); var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId) .Include(u => u.LastName).ToList();
它返回此错误:
指定的包含路径无效.EntityType"ChatProj.Models.UserProfile"未声明名称为"LastName"的导航属性.
这是我的localDb和模型的图片.
知道为什么它不起作用吗?
如果您只想检索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属性(与另一个实体的关系)
Include
仅用于导航属性,并且LastName
是标量属性,因此您根本不需要Include
.
导航属性应该是相关实体集合的实体类型.包括一些导航属性意味着加入了一些相关的实体或实体的当前实体.这允许在单个查询中从几个表中急切加载数据.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
虽然这与问题并不完全相关,但是由于谷歌将你带到这里,我认为可能有必要注意到IEnumerable
你的收藏可能是你的用途.相反,您应该使用ICollection
,请在此处查看更多信息:https://stackoverflow.com/a/32997694/550975