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

发布于 2025-02-07 21:15:55 字数 3786 浏览 0 评论 0原文

我使用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();
}

在招牌中,它在示例中根据模型正确显示:

[
  {
    "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列表显示为空,但是我的数据库中存在数据库中的数据。

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

I have created an API, using EF and database first approach via scaffolding.

I have the following in my context file:

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");
});

and then the following in my models:

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; }
}

Request Line:

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; }
}

My Request controller looks like this:

[HttpGet]
public async Task<ActionResult<IEnumerable<Request>>> GetRequests()
{
  if (_context.Requests == null)
  {
      return NotFound();
  }
    return await _context.Requests.ToListAsync();
}

In Swagger, it is displayed correctly in the example, based on the model:

[
  {
    "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"
      }
    ]
  }
] 

But when running the GET, what I am actually seeing is:

[
  {
    "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": []
  }
]

The requestLines lists are showing empty, but there is data present in my database for these.

Apologies for the length of the question. If further information is needed please let me know.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

向地狱狂奔 2025-02-14 21:15:55

这样的东西

return await _context.Requests.Include(x => x.RequestLines).ToListAsync();

Something like this

return await _context.Requests.Include(x => x.RequestLines).ToListAsync();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文