在Entity Framework中一次将数据存储在两个表中

时间:2014-07-02 12:35:02

标签: entity-framework asp.net-web-api

我有三张桌子

  1. 产品{pid,pname,price}
  2. 订单{oid,odate}
  3. OrderDetails {odid,oid,pid,qty,total}
  4. 我有一个表单,在提交时传递了一个OrderDetails数组,我希望将其存储在数据库中。但这里的悲剧是我想同时在Order表中存储当前日期。现在我的Order表中填充了odate但是没有任何内容插入到我的orderdetails表中。我正在使用web api,并且在控制器中正确获取了数组。我想这一行

    aOrder.AllOrders.Add(od);
    
    控制器中的

    必须用其他东西替换。

    Order.cs

    public class Order
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int oid { get; set; }
        [DataType(DataType.DateTime)]
        public DateTime odate { get; set; }
        public virtual List<OrderDetail> AllOrders { get; set; }
        public Order()
        {
            AllOrders = new List<OrderDetail>();
        }
    }
    

    OrderDetail.cs

    public class OrderDetail
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int odid { get; set; }
        public int oid { get; set; }
        public virtual Order order { get; set; }
        public int pid { get; set; }
        public int qty { get; set; }
        public int total { get; set; }
        public virtual Product Aproduct { get; set; }
        public OrderDetail()
        {
            Aproduct = new Product();
        }
    }
    

    OrderDetailsController.cs

        private static readonly IOrderDetailRepository _orders = new OrderDetailRepository();
    
        public Order Post(List<OrderDetail> orderDetails)
        {
            Order aOrder = new Order();   
            foreach(OrderDetail orderDetail in orderDetails)
            {
                OrderDetail od = new OrderDetail();
                od.oid = orderDetail.oid;
                od.pid = orderDetail.pid;
                od.qty = orderDetail.qty;
                od.total = orderDetail.total;
                aOrder.AllOrders.Add(od);
            }
            aOrder.odate = DateTime.Now;
            return _orders.Add(aOrder);
    
        }
    

    OrderDetailRepository.cs

        public Order Add(Order order)
        {
            _db.Orders.Add(order);
            _db.SaveChanges();
            return order;
        }
    

1 个答案:

答案 0 :(得分:0)

您可以尝试为OrderDetails指定外键:

public class OrderDetail
{
[ForeignKey("Order")]
public int oid { get; set; } //I'm guessing this is Order's PK