【问题标题】:Storing data in two tables at a time in Entity Framework在实体框架中一次将数据存储在两个表中
【发布时间】:2014-07-02 21:06:04
【问题描述】:

我有三张桌子

  1. 产品 { pid, pname, price }
  2. 订单 { oid, odate }
  3. OrderDetails { odid, oid, pid, qty, total }

我有一个表单,它在提交时会传递我想要存储在数据库中的 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;
    }

【问题讨论】:

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


    【解决方案1】:

    您能否尝试为 OrderDetails 指定外键:

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

    【讨论】:

    • 我已经在所有模型中完成了映射,所以我不必单独指定哪个是外键,因为所有模型都已经相关,对吧?我想这不是问题。无论如何,我都尝试这样做,但在获取数据时却让我犯了错误。所以我又把它删了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多