简体   繁体   English

使用 EF Core 从数据库中检索数据需要很长时间

[英]Retrieving data from database using EF Core takes too long

I'm working on an API project using ASP.NET Core and EF Core 6. I have created a relational database using the Code-First approach.我正在使用 ASP.NET Core 和 EF Core 6 开发一个 API 项目。我使用Code-First方法创建了一个关系数据库。 The problem is that when I try to get all data in the table PmSchedules from the database, it takes too long while I have only 20 records in the table.问题是,当我尝试从数据库中获取表PmSchedules中的所有数据时,它花费的时间太长,而表中只有 20 条记录。

When I have 30 records in that table, PostMan throws an error and says:当我在该表中有 30 条记录时,PostMan 会抛出一个错误并说:

Error: Maximum response size reached错误:达到最大响应大小

Some of the properties related to that table are:与该表相关的一些属性是:

public class PmSchedule
{
    [Key]
    public long PmScheduleId { get; set; }
    [Required]
    public long ScheduleNumber { get; set; }
    [Required]
    [DataType(DataType.DateTime)]
    public DateTime ScheduledStartDate { get; set; }
    [Required]
    [DataType(DataType.DateTime)]
    public DateTime ScheduledEndDate { get; set; }
    [Required]
    [DataType(DataType.Text)]
    public string MainFileName { get; set; }
    [DataType(DataType.Text)]
    public string? UploadedFileName { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime? CompletionDate { get; set; }
    [Required]
    [DataType(DataType.Text)]
    public string? Status { get; set; }

    //Navigation properties
    public virtual CostCenter CostCenter { get; set; }
    public virtual ServiceType ServiceType { get; set; }
    //For Adding two foreinkeys
    [Required]
    public int MainUploaderId { get; set; }
    public User MainUploader { get; set; }
    public int? UploaderId { get; set; }
    public User Uploader { get; set; }
    [Required]
    public int WorkCenterId { get; set; }
    public WorkCenter WorkCenter { get; set; }
}

public class WorkCenter
{
    [Key]
    public int WorkCenterId { get; set; }
    [Required]
    public WorkCenters Work_Center { get; set; }
    [Required]
    public bool IsActive { get; set; }

    //Navigation propery
    public virtual List<UserWorkCenter>? UserWorkCenters { get; set; }
    public virtual List<PmSchedule>? PmSchedules { get; set; }
    public virtual List<PmDataSet>? PmDataSets { get; set; }
}

public enum WorkCenters
{
    Electrical,
    Mechanical
}

public class ServiceType
{
    [Key]
    public int ServiceTypeId { get; set; }
    [Required]
    [DataType(DataType.Text)]
    public string Title { get; set; }
    [Required]
    public bool IsActive { get; set; } = true;

    //Navigation properties
    public virtual List<PmDataSet>? PmDataSets { get; set; }
    public virtual List<PmSchedule>? PmSchedules { get; set; }
}

public class CostCenter
{
    [Key]
    public int CostCenterId { get; set; }
    [Required]
    [DataType(DataType.Text)]
    public string Title { get; set; }
    [Required]
    public bool IsActive { get; set; } = true;


    //Navigation properties
    public virtual List<PmDataSet>? PmDataSets { get; set; }
    public virtual List<PmSchedule>? PmSchedules { get; set; }
    public virtual List<Equipment>? Equipments { get; set; }
    public virtual List<UserCostCenter>? UserCostCenters { get; set; }
}

I'm using following code to produce the response:我正在使用以下代码来生成响应:

var pmSchedule = await _sqlServerContext.PmSchedules
                                        .Include(x => x.CostCenter)
                                        .Include(x => x.ServiceType)
                                        .Include(x => x.WorkCenter)
                                        .ToListAsync();

if (pmSchedule.Count > 0)
{
    return Ok(pmSchedule);
}

return NoContent();

How can I fix this problem?我该如何解决这个问题?

Update 1:更新1:

The API response for only two database entries are:只有两个数据库条目的 API 响应是:

[
{
    "pmScheduleId": 2,
    "scheduleNumber": 100,
    "scheduledStartDate": "2022-06-22T00:00:00",
    "scheduledEndDate": "2022-07-05T00:00:00",
    "mainFileName": "2022-7-9-808ab30a-889a-4890-82b3-67e6d06da7c0.docx",
    "uploadedFileName": null,
    "completionDate": null,
    "status": "Registered",
    "costCenter": {
        "costCenterId": 2,
        "title": "USA",
        "isActive": true,
        "pmDataSets": null,
        "pmSchedules": [
            null,
            {
                "pmScheduleId": 3,
                "scheduleNumber": 100,
                "scheduledStartDate": "2022-06-22T00:00:00",
                "scheduledEndDate": "2022-07-05T00:00:00",
                "mainFileName": "2022-7-9-1fd2a4c8-0607-4258-beed-81f043c4fb5f.docx",
                "uploadedFileName": null,
                "completionDate": null,
                "status": "Registered",
                "costCenter": null,
                "serviceType": {
                    "serviceTypeId": 1,
                    "title": "Monthly",
                    "isActive": true,
                    "pmDataSets": null,
                    "pmSchedules": [
                        null,
                        null
                    ]
                },
                "mainUploaderId": 1,
                "mainUploader": null,
                "uploaderId": null,
                "uploader": null,
                "workCenterId": 1,
                "workCenter": {
                    "workCenterId": 1,
                    "work_Center": 0,
                    "isActive": true,
                    "userWorkCenters": null,
                    "pmSchedules": [
                        null,
                        null
                    ],
                    "pmDataSets": null
                }
            }
        ],
        "equipments": null,
        "userCostCenters": null
    },
    "serviceType": {
        "serviceTypeId": 1,
        "title": "Monthly",
        "isActive": true,
        "pmDataSets": null,
        "pmSchedules": [
            null,
            {
                "pmScheduleId": 3,
                "scheduleNumber": 100,
                "scheduledStartDate": "2022-06-22T00:00:00",
                "scheduledEndDate": "2022-07-05T00:00:00",
                "mainFileName": "2022-7-9-1fd2a4c8-0607-4258-beed-81f043c4fb5f.docx",
                "uploadedFileName": null,
                "completionDate": null,
                "status": "Registered",
                "costCenter": {
                    "costCenterId": 2,
                    "title": "USA",
                    "isActive": true,
                    "pmDataSets": null,
                    "pmSchedules": [
                        null,
                        null
                    ],
                    "equipments": null,
                    "userCostCenters": null
                },
                "serviceType": null,
                "mainUploaderId": 1,
                "mainUploader": null,
                "uploaderId": null,
                "uploader": null,
                "workCenterId": 1,
                "workCenter": {
                    "workCenterId": 1,
                    "work_Center": 0,
                    "isActive": true,
                    "userWorkCenters": null,
                    "pmSchedules": [
                        null,
                        null
                    ],
                    "pmDataSets": null
                }
            }
        ]
    },
    "mainUploaderId": 1,
    "mainUploader": null,
    "uploaderId": null,
    "uploader": null,
    "workCenterId": 1,
    "workCenter": {
        "workCenterId": 1,
        "work_Center": 0,
        "isActive": true,
        "userWorkCenters": null,
        "pmSchedules": [
            null,
            {
                "pmScheduleId": 3,
                "scheduleNumber": 100,
                "scheduledStartDate": "2022-06-22T00:00:00",
                "scheduledEndDate": "2022-07-05T00:00:00",
                "mainFileName": "2022-7-9-1fd2a4c8-0607-4258-beed-81f043c4fb5f.docx",
                "uploadedFileName": null,
                "completionDate": null,
                "status": "Registered",
                "costCenter": {
                    "costCenterId": 2,
                    "title": "USA",
                    "isActive": true,
                    "pmDataSets": null,
                    "pmSchedules": [
                        null,
                        null
                    ],
                    "equipments": null,
                    "userCostCenters": null
                },
                "serviceType": {
                    "serviceTypeId": 1,
                    "title": "Monthly",
                    "isActive": true,
                    "pmDataSets": null,
                    "pmSchedules": [
                        null,
                        null
                    ]
                },
                "mainUploaderId": 1,
                "mainUploader": null,
                "uploaderId": null,
                "uploader": null,
                "workCenterId": 1,
                "workCenter": null
            }
        ],
        "pmDataSets": null
    }
},
{
    "pmScheduleId": 3,
    "scheduleNumber": 100,
    "scheduledStartDate": "2022-06-22T00:00:00",
    "scheduledEndDate": "2022-07-05T00:00:00",
    "mainFileName": "2022-7-9-1fd2a4c8-0607-4258-beed-81f043c4fb5f.docx",
    "uploadedFileName": null,
    "completionDate": null,
    "status": "Registered",
    "costCenter": {
        "costCenterId": 2,
        "title": "USA",
        "isActive": true,
        "pmDataSets": null,
        "pmSchedules": [
            {
                "pmScheduleId": 2,
                "scheduleNumber": 100,
                "scheduledStartDate": "2022-06-22T00:00:00",
                "scheduledEndDate": "2022-07-05T00:00:00",
                "mainFileName": "2022-7-9-808ab30a-889a-4890-82b3-67e6d06da7c0.docx",
                "uploadedFileName": null,
                "completionDate": null,
                "status": "Registered",
                "costCenter": null,
                "serviceType": {
                    "serviceTypeId": 1,
                    "title": "Monthly",
                    "isActive": true,
                    "pmDataSets": null,
                    "pmSchedules": [
                        null,
                        null
                    ]
                },
                "mainUploaderId": 1,
                "mainUploader": null,
                "uploaderId": null,
                "uploader": null,
                "workCenterId": 1,
                "workCenter": {
                    "workCenterId": 1,
                    "work_Center": 0,
                    "isActive": true,
                    "userWorkCenters": null,
                    "pmSchedules": [
                        null,
                        null
                    ],
                    "pmDataSets": null
                }
            },
            null
        ],
        "equipments": null,
        "userCostCenters": null
    },
    "serviceType": {
        "serviceTypeId": 1,
        "title": "Monthly",
        "isActive": true,
        "pmDataSets": null,
        "pmSchedules": [
            {
                "pmScheduleId": 2,
                "scheduleNumber": 100,
                "scheduledStartDate": "2022-06-22T00:00:00",
                "scheduledEndDate": "2022-07-05T00:00:00",
                "mainFileName": "2022-7-9-808ab30a-889a-4890-82b3-67e6d06da7c0.docx",
                "uploadedFileName": null,
                "completionDate": null,
                "status": "Registered",
                "costCenter": {
                    "costCenterId": 2,
                    "title": "USA",
                    "isActive": true,
                    "pmDataSets": null,
                    "pmSchedules": [
                        null,
                        null
                    ],
                    "equipments": null,
                    "userCostCenters": null
                },
                "serviceType": null,
                "mainUploaderId": 1,
                "mainUploader": null,
                "uploaderId": null,
                "uploader": null,
                "workCenterId": 1,
                "workCenter": {
                    "workCenterId": 1,
                    "work_Center": 0,
                    "isActive": true,
                    "userWorkCenters": null,
                    "pmSchedules": [
                        null,
                        null
                    ],
                    "pmDataSets": null
                }
            },
            null
        ]
    },
    "mainUploaderId": 1,
    "mainUploader": null,
    "uploaderId": null,
    "uploader": null,
    "workCenterId": 1,
    "workCenter": {
        "workCenterId": 1,
        "work_Center": 0,
        "isActive": true,
        "userWorkCenters": null,
        "pmSchedules": [
            {
                "pmScheduleId": 2,
                "scheduleNumber": 100,
                "scheduledStartDate": "2022-06-22T00:00:00",
                "scheduledEndDate": "2022-07-05T00:00:00",
                "mainFileName": "2022-7-9-808ab30a-889a-4890-82b3-67e6d06da7c0.docx",
                "uploadedFileName": null,
                "completionDate": null,
                "status": "Registered",
                "costCenter": {
                    "costCenterId": 2,
                    "title": "USA",
                    "isActive": true,
                    "pmDataSets": null,
                    "pmSchedules": [
                        null,
                        null
                    ],
                    "equipments": null,
                    "userCostCenters": null
                },
                "serviceType": {
                    "serviceTypeId": 1,
                    "title": "Monthly",
                    "isActive": true,
                    "pmDataSets": null,
                    "pmSchedules": [
                        null,
                        null
                    ]
                },
                "mainUploaderId": 1,
                "mainUploader": null,
                "uploaderId": null,
                "uploader": null,
                "workCenterId": 1,
                "workCenter": null
            },
            null
        ],
        "pmDataSets": null
    }
}

] ]

I used the [JsonIgnore] attribute in some of the properties causing circular reference in JSON.我在一些导致 JSON 循环引用的属性中使用了[JsonIgnore]属性。 The problem is solved.问题已经解决了。

why You marked all the string fields as [DataType(DataType.Text)] That is the mistake.为什么您将所有字符串字段标记为 [DataType(DataType.Text)] 那是错误的。 remove all [DataType(DataType.Text)] and add Length attribute.删除所有 [DataType(DataType.Text)] 并添加 Length 属性。 It should fix your issue.它应该可以解决您的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM