[英]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.