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"的导航属性.
知道为什么它不起作用吗?
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)
Ser*_*gan 16
虽然这与问题并不完全相关,但是由于谷歌将你带到这里,我认为可能有必要注意到IEnumerable你的收藏可能是你的用途.相反,您应该使用ICollection,请在此处查看更多信息:https://stackoverflow.com/a/32997694/550975
如果您只想检索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属性(与另一个实体的关系)