为什么我的 API 不返回嵌套对象(.NET 6 实体框架和 SQL 数据库)

问题描述 投票:0回答:1

我通过脚手架使用 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
列表显示为空,但我的数据库中存在这些数据。

对于问题的长度表示歉意。如果需要更多信息,请告诉我。

c# sql .net entity-framework
1个回答
1
投票

类似这样的事情

return await _context.Requests.Include(x => x.RequestLines).ToListAsync();
© www.soinside.com 2019 - 2024. All rights reserved.