首页 > 解决方案 > 如何将相关数据的发布请求从 Angular 发送到 .NET 核心 api

问题描述

我是 Angular 和 .NET 核心的新手,我正在尝试通过 .net 核心 api 将相关数据存储到 sqlserver。我的问题是订单控制器正在接收一个订单对象它将如何存储具有相同 OrderId 的订单项,这些订单项将在订单表中生成?另外我无法调用订单控制器,我的服务方法返回此错误

加载资源失败:服务器响应状态为 500 () POST https://localhost:44378/api/Orders 500

结帐.ts

  placeorder() {

    this.postservice.placeorder(this.orderdata.value, this.cart.selections)
  }

在此代码中orderdata.value是简单值,而cart.selections是对象列表

服务代码

  placeorder(orderdata: order, orderitems: orderItems): Observable<any[]>{
return this.http.post<any[]>(this.myAppUrl + 'api/Orders', [orderdata,orderitems]);}

订单接口

export interface order{
  orderid: number;
  uid: number;
  orderdate: Date;
  orderstatus: string;

}

订单项接口

export interface orderItems extends Array<orderItem> {
}

export interface orderItem {
  productId?: number;
  productName?: string;
  productPrice?: number;
  quantityValue?: number;
}

订单控制器

[HttpPost]
public async Task<ActionResult<Orders>> PostOrders(Orders orders)
{
  _context.Orders.Add(orders);
  await _context.SaveChangesAsync();

   return CreatedAtAction("GetOrders", new { id = orders.OrderId }, orders);
 }

订单模型类

    public partial class Orders
{
    public Orders()
    {
        OrderItems = new HashSet<OrderItems>();
    }

    public int OrderId { get; set; }
    public int? Uid { get; set; }
    public DateTime? OrderDate { get; set; }
    public string OrderStatus { get; set; }

    public virtual ICollection<OrderItems> OrderItems { get; set; }
}

OrderItems 模型类

public partial class OrderItems
{
    public int ItemId { get; set; }
    public int? ProductId { get; set; }
    public string ProductName { get; set; }
    public int? ProductPrice { get; set; }
    public int? ProductQuantity { get; set; }
    public int? OrderId { get; set; }

    public virtual Orders Order { get; set; }
}

标签: angularasp.net-coreentity-framework-coreasp.net-core-webapi

解决方案


如果我正确理解您的请求,您想添加与尚不存在的订单相关的文章。用技术术语来说,您没有主顺序键来将其指示为文章的外键。

当您在 DbContext 中添加条目并对此 DbContext 进行备份时,唯一标识符将被赋值并在先前添加的对象上返回给您。

如果在 DbContext 中添加“Order”对象,则无法在此处指示唯一标识符,因为 SQL 会处理它。如果您创建 DbContext.SaveChanges(),请知道订单的唯一标识符将在先前添加到您的 DbContext 的“订单”对象的实例上进行评估。

您只需在数据库中添加带有订单唯一标识符的文章。

如果您有任何问题,我将继续提供服务,我们很快再见!


推荐阅读