Asp.NET Core MVC中主从最佳实践-创建订单

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

Order and OrderDetail是使用Master-detail的经典示例。我一直在寻找这种情况的最佳解决方案。是的,有很多解决方案,但是差异很大。

我的问题是关于在同一视图上创建Order和OrderDetails。

在我的创建订单屏幕上,有关于我的订单的字段,以及一个包含OrderDetails的表,可以在其中添加它们。我正在使用Guid作为ID,这变得更加容易。

但是问题是:没有订单,我无法在数据库中添加OrderDetails。我该怎么办?

  • 仅在一个请求中发送订单,包括订单详细信息列表?
  • 使用Ajax,将项目保存在会话中,返回带有列表的PartialView,然后使用Order将它们保存在数据库中吗?
  • 保存订单,然后返回查看并允许使用Ajax使用添加订单明细字段?

你们有什么建议?

asp.net-mvc asp.net-core master-detail
1个回答
0
投票

仅在一个请求中发送订单,包括订单详细信息列表?

我将采用此方法,EF可以直接添加带有嵌套实体的实体,它们将保存到相应的数据库表中。

这是一个测试示例:

订单

public class Order
{
    [Key]
    public int Id { get; set; }
    public string Name  { get; set; }
    public List<OrderDetail> OrderDetails { get; set; }
}

OrderDetail

public class OrderDetail
{
    [Key]
    public int OrderDetailId { get; set; }
    public int OrderId { get; set; }
    public string Price { get; set; }
    public Order Order { get; set; }
}

Controller

public IActionResult Index()
    {
        var order = new Order
        {
            Name = "AA",
            OrderDetails = new List<OrderDetail>
            {
                new OrderDetail{   Price = "22"},
                new OrderDetail{   Price = "33"}
            }
        };
        _context.Order.Add(order);
        _context.SaveChanges();
        return View();
    }

结果:

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.