asp.net - 即使我没有包含外键的一些数据也会自动加载
问题描述
我正在制作关于让 2 人或更多人可以互相预约的项目。一切正常,但我只是意识到即使我没有在代码中包含外键的一些数据也会自动加载。
这是我制作的 API 的结果
{
"uId": 1,
"userId": "xxxx",
"receiveAppointmentForms": [],
"requestAppointmentForms": [
{
...Some infomation,
"receiveUser": {
"uId": 2,
"userId": "zzz",
"receiveAppointmentForms": [],
"requestAppointmentForms": null,
"topThrees": null,
"userRole": null,
"coach": null,
"department": null,
"position": null
},
"record": null
}
],
"userRole": null,
"coach": null,
"department": null,
"position": null
},
所以我确实包含了“requestAppointmentForms”字段,但我不希望显示“receiveUser”,它是指用户表的外键。因为我没有在我的网页上使用这些信息,它使请求变慢,因为它有很多数据。
这是我在控制器上的代码
[HttpGet]
public IEnumerable<User> GetUsers()
{
return _context.Users.Include( r => r.ReceiveAppointmentForms)
.Include(r => r.RequestAppointmentForms);
}
约会表格模型的代码
[Key]
public int AppointmentFormId { get; set; }
public string AppointmentDate { get; set; }
public DateTime AppointmentDateRequest { get; set; }
public string AppointmentTimeStart { get; set; }
public string AppointmentStatus { get; set; }
public string AppointmentCancelComment { get; set; }
public int? RequestUserId { get; set; }
public int? ReceiveUserId { get; set; }
public User RequestUser { get; set; }
public User ReceiveUser { get; set; }
public AppointmentRecord Record { get; set; }
解决方案
当您想使用 API 发送数据时,您可以做的一件事是创建一个新类。它是安全的,您可以发送您只想要的任何数据。(视图模型)
如果您直接使用实体,WebAPI 会将所有参数模型绑定到它们,即使您不想这样做。我的建议是创建一个新模型,然后发送您的数据
public class UserViewModel
{
public int AppointmentFormId { get; set; }
public string AppointmentDate { get; set; }
public DateTime AppointmentDateRequest { get; set; }
//Your other data and tables you want
}
现在调用你的 Api 会是这样的
[HttpGet]
public IEnumerable<UserViewModel> GetUsers()
{
IEnumerable<UserViewModel> usersList = new List<UserViewModel>();
foreach (var item in _context.Users.tolist())
{
userList.add(new UserViewModel{
AppointmentFormId = item.AppointmentFormId ,
//other data
});
}
它既简单又安全!
推荐阅读
- python - 如何从命令行激活 Anaconda 环境?
- kubernetes - 是否可以在不添加 Kubernetes 集群的情况下在 Gitlab 中运行测试?
- c# - 在 .NET Core 2 中创建 HttpClient 的最佳实践
- jmeter - 如何修复jemeter运行记录中的“不愿意透露存在”错误
- angular - Angular Material Stepper 的验证
- android - 在不破坏现有小部件的情况下重命名 AppWidgetProvider
- prolog - Prolog-仅使用“+”将代数表达式拆分为单独的原子和数字列表
- c# - 在选择时使用 ComboBox.DataSource 项
- c# - 如果我有一个重复次数的数字,我如何重复一个字符来组成一个字符串?
- awk - 根据 awk 中的字段值隔离行