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

 blue暗紫天堂 发布于 2023-02-09 19:19

我正在尝试从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和模型的图片.

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

4 个回答
  • 如果您只想检索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属性(与另一个实体的关系)

    2023-02-09 19:20 回答
  • Include仅用于导航属性,并且LastName是标量属性,因此您根本不需要Include.

    2023-02-09 19:21 回答
  • 导航属性应该是相关实体集合的实体类型.包括一些导航属性意味着加入了一些相关的实体或实体的当前实体.这允许在单个查询中从几个表中急切加载数据.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
    

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

    2023-02-09 19:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有