c# - 使用 Include 显示属性值的问题
问题描述
我正在学习ASP.NET 核心并遇到此问题。我有两个外键属性,我想在我的GET方法中显示它们。该模型如下所示:
[Key]
public int WorkRoomId { get; set; }
[ForeignKey("Room")]
[Required]
public int RoomId { get; set; }
public Room Room { get; set; }
[ForeignKey("ApplicationUser")]
[Required]
public string Id { get; set; }
public virtual ApplicationUser Employee { get; set; }
ApplicationUser
是identityUser
,而我在 Controller 中的GET方法是:
public async Task<ActionResult<IEnumerable<WorkRoom>>> GetWorkRooms()
{
var workRooms =await _context.WorkRooms
.Include(i => i.Room)
.Include(i => i.Employee)
.ToListAsync();
return workRooms;
}
当我“得到”这个时,我收到:
[
{
"workRoomId": 1,
"roomId": 1,
"room": {
"roomId": 1,
"roomName": "H-103"
},
"id": "0dadca05-5133-428c-936b-6b5569e33286",
"employee": null
}
]
为什么房间可以正常工作,而员工却不能?
我需要添加一些东西才能解决吗?
如果我可以正常显示“员工”,如何从 ApplicationUser 中只选择一些字段来显示,因为有很多字段我不需要显示?因为似乎选择功能仅显示 WorkRoom 中的属性供我选择。
解决方案
对于您的此类模型,它将创建一个带有EmployeeId
在数据库中命名的外键的表(您可以打开数据库以检查它是否正确。或者检查迁移文件)。但是您认为Id
是外键,这就是为什么您设置了值Id
但无法获取相关ApplicationUser
数据的原因。
如下更改您的 WorkRoom 类,然后运行命令add migration
并update database
再次更新数据库:
public class WorkRoom
{
[Key]
public int WorkRoomId { get; set; }
[ForeignKey("Room")]
[Required]
public int RoomId { get; set; }
public Room Room { get; set; }
[ForeignKey("Employee")] //change here...
[Required]
public string Id { get; set; }
public virtual ApplicationUser Employee { get; set; }
}
更新:
var workRooms = _context.WorkRooms
.Include(i => i.Room)
.Include(i => i.Employee).Select(i=>new {
Room = i.Room,
EmployeeId = i.Employee.Id,
i.WorkRoomId
}).ToList();
推荐阅读
- python - 使用回调加载 Gensim FastText 模型失败
- javascript - jQuery 显示/隐藏切换仅在大屏幕尺寸下触发
- javascript - 如何在 DOM 中搜索具有特定类的项目
- javascript - 带有提示的 Cookie
- sapui5 - 为 SAPUI5 应用程序实施内联帮助/导览
- javascript - 是的,验证不同对象形状的数组
- react-native - 刷新内容中的平面列表
- javascript - 物化 CSS 轮播指示器不可点击
- javascript - PHP 从 React JS 发送 FormData 后返回 NULL(Fetch,方法:POST)
- android - 使用没有自定义适配器的 Moshi 解析列表