【问题标题】:Want to insert two tables in one method ASP.NET web api 2想在一种方法中插入两个表 ASP.NET web api 2
【发布时间】:2021-06-26 22:44:11
【问题描述】:

我尝试使用下面的代码将数据插入两个表,但它只插入一个表,第二个表的数据没有插入,它只是插入 Tstamp 列。我试图从 POSTMON POST 数据。

 [HttpPost]
    public async Task<IHttpActionResult> PostOrder(CustomerOrder customerOrder)
    {
        using (GeoContext context = new GeoContext())
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var order = context.CustomerOrders.Add(customerOrder);
            context.CustomerOrders.Add(order);
            order.Tstamp = DateTime.Now;

            OrderProduct prod = new OrderProduct();

            var product = context.OrderProducts.Add(prod);
            context.OrderProducts.Add(product);
            order.OrderID = product.OrderID;
            product.Tstamp = DateTime.Now;

            await context.SaveChangesAsync();
        }

        return Ok(new { Message = "Order placed" });
    }

低于我尝试从 POSTMAN 插入的 JSON 值

{
"CustomerID":2,
"OrderNo":4,
"TotalPrice":50.00,
"Tstamp":"2021-03-31",
"Product":"Apple",
"Price":5,
"Quantity":10
}

客户订单类

 public partial class CustomerOrder
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public CustomerOrder()
    {
        this.OrderProducts = new HashSet<OrderProduct>();
    }

    public int OrderID { get; set; }
    public int CustomerID { get; set; }
    public Nullable<int> OrderNo { get; set; }
    public Nullable<double> TotalPrice { get; set; }
    public Nullable<System.DateTime> Tstamp { get; set; }

    public virtual Customer Customer { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<OrderProduct> OrderProducts { get; set; }
}

订单产品类

 public partial class OrderProduct
{
    public int OrderProductID { get; set; }
    public int OrderID { get; set; }
    public string Product { get; set; }
    public Nullable<double> Price { get; set; }
    public Nullable<int> Quantity { get; set; }
    public Nullable<System.DateTime> Tstamp { get; set; }

    public virtual CustomerOrder CustomerOrder { get; set; }
}

【问题讨论】:

  • 你能展示一下 CustomerOrder 和 OrderProduct 类吗?
  • @Sergey 编辑问题。您现在可以查看
  • 您从未设置过prod 属性?你有OrderProduct prod = new OrderProduct(); 但没有像prod.OrderID = ??; prod.Product="??
  • @RuiCaramalho 如何从 POSTMON 传递两个表中的数据?
  • @Sergey 给了你答案:)

标签: c# json asp.net-web-api postman


【解决方案1】:

您必须创建并填写一个 OrderProduct 实例并将其添加到 CustomerOrder 才能将记录添加到 OrderProduct 表中。

{
    "customerID": 2,
    "orderNo": 4,
    "tstamp": "2021-03-31",
    "orderProducts": [
        {
        "Product":"Apples",
        "Price":5,
        "Quantity":10 
        }
    ]
}

修正邮递员的动作:

   [HttpPost]
    public async Task<IHttpActionResult> PostOrder(CustomerOrder customerOrder)
    {
        using (GeoContext context = new GeoContext())
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

          double? orderSum = 0.0;
            foreach (var product in customerOrder.OrderProducts)
            {
                product.Tstamp = DateTime.Now;
                orderSum += ( (double)product.Price) * product.Quantity;
            }
             context.CustomerOrders.Add(customerOrder);
            await context.SaveChangesAsync();
        }

        return Ok(new { Message = "Order placed" });
    }

【讨论】:

    猜你喜欢
    • 2019-07-18
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多