我通过脚手架使用 EF 和数据库优先方法创建了一个 API。
我的上下文文件中有以下内容:
modelBuilder.Entity<Request>(entity =>
{
entity.ToTable("Request", "rmr");
entity.Property(e => e.CreatedOn).HasColumnType("datetime");
entity.Property(e => e.RaisedBy).HasMaxLength(256);
entity.Property(e => e.WorklistName).HasMaxLength(32);
});
modelBuilder.Entity<RequestLine>(entity =>
{
entity.HasKey(e => new { e.RequestId, e.LineNumber })
.HasName("PK_RMR_REQUESTLINE");
entity.ToTable("RequestLine", "rmr");
entity.Property(e => e.Batch).HasMaxLength(32);
entity.Property(e => e.CancelBy).HasMaxLength(256);
entity.Property(e => e.CancelDate).HasColumnType("datetime");
entity.Property(e => e.CostCentre).HasMaxLength(32);
entity.Property(e => e.Destination).HasMaxLength(32);
entity.Property(e => e.FirstDeliveryDate).HasColumnType("datetime");
entity.Property(e => e.ProcessOrder).HasMaxLength(32);
entity.Property(e => e.Sku)
.HasMaxLength(32)
.HasColumnName("SKU");
entity.Property(e => e.SubmittedDate).HasColumnType("datetime");
entity.HasOne(d => d.Request)
.WithMany(p => p.RequestLines)
.HasForeignKey(d => d.RequestId)
.HasConstraintName("FK_RMR_REQUESTLINE_REQUEST");
});
然后在我的模型中添加以下内容:
要求:
public partial class Request
{
public Request()
{
RequestLines = new HashSet<RequestLine>();
}
public long Id { get; set; }
public string RaisedBy { get; set; } = null!;
public DateTime CreatedOn { get; set; }
public string? WorklistName { get; set; }
public virtual ICollection<RequestLine> RequestLines { get; set; }
}
请求专线:
public partial class RequestLine
{
public long RequestId { get; set; }
public int LineNumber { get; set; }
public string Sku { get; set; } = null!;
public string Batch { get; set; } = null!;
public int Quantity { get; set; }
public string? CostCentre { get; set; }
public string? ProcessOrder { get; set; }
public string Destination { get; set; } = null!;
public DateTime FirstDeliveryDate { get; set; }
public DateTime? SubmittedDate { get; set; }
public DateTime? CancelDate { get; set; }
public string? CancelBy { get; set; }
}
我的请求控制器如下所示:
[HttpGet]
public async Task<ActionResult<IEnumerable<Request>>> GetRequests()
{
if (_context.Requests == null)
{
return NotFound();
}
return await _context.Requests.ToListAsync();
}
在Swagger中,示例中显示正确,基于模型:
[
{
"id": 0,
"raisedBy": "string",
"createdOn": "2022-06-15T17:32:27.129Z",
"worklistName": "string",
"requestLines": [
{
"requestId": 0,
"lineNumber": 0,
"sku": "string",
"batch": "string",
"quantity": 0,
"costCentre": "string",
"processOrder": "string",
"destination": "string",
"firstDeliveryDate": "2022-06-15T17:32:27.129Z",
"submittedDate": "2022-06-15T17:32:27.129Z",
"cancelDate": "2022-06-15T17:32:27.129Z",
"cancelBy": "string",
"request": "string"
}
]
}
]
但是当运行 GET 时,我实际看到的是:
[
{
"id": 1,
"raisedBy": "GEORGE",
"createdOn": "2022-06-13T13:14:31.813",
"worklistName": "WORKLIST1",
"requestLines": []
},
{
"id": 10008,
"raisedBy": "FFFFFF",
"createdOn": "2022-06-15T16:34:18.297",
"worklistName": "WORKLIST1",
"requestLines": []
}
]
requestLines
列表显示为空,但我的数据库中存在这些数据。
对于问题的长度表示歉意。如果需要更多信息,请告诉我。
类似这样的事情
return await _context.Requests.Include(x => x.RequestLines).ToListAsync();