首页 > 解决方案 > 即使我没有包含外键的一些数据也会自动加载

问题描述

我正在制作关于让 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; }

标签: asp.netasp.net-corec#-4.0

解决方案


当您想使用 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
});
}

它既简单又安全!

您可以查看此链接以获取更多信息


推荐阅读