使用实体框架

时间:2016-10-24 15:45:41

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

我的数据库中有两个表,我通过Web API填写:

Orders
________
OrderID
OrderDate
OrderStatusID

OrderItems
___________
OrderID
ItemID
ItemVersionID
ItemNote
ItemSortOrder

我需要在两个表中插入Order和该订单的所有项目。 OrderID是数据库生成的标识字段,用于将数据插入OrderItems表。

OrderItems表的主键是复合键(OrderID, ItemID, ItemVersionID),这很重要,因为相同的订单可以包含多个具有相同ID但版本ID不同的商品。

我想知道是否必须单独添加OrderOrderItems数据,或者可以在单个控制器功能中添加。{/ p>

以下是我的模型类:

 [Table("SN_Orders")]
    public class Order
    {
        [Key]
        public int OrderID { get; set; }
        public DateTime OrderDate { get; set; }
        public int OrderStatusID { get; set; }
        public List<OrderItem> Details { get; set; }
    }

    [Table("SN_OrderItems")]
    public class OrderItem
    {
        [Column(Order = 0), Key]
        public int ItemID { get; set; }
        [Column(Order = 1), Key]
        public int ItemVersionID { get; set; }
        [Column(Order = 2), Key]
        public int OrderID { get; set; }
        public string ItemNote { get; set; }
        public int ItemSortOrder { get; set; }
    }

以下是我尝试传递的OrderItems Order列表,其中[HttpPost] public IHttpActionResult PostItemToOrder(myClass.Order ord1, List<myClass.OrderItem> itemList) { if (!ModelState.IsValid) { return BadRequest(ModelState); } using (MyContext ctx = new MyContext()) { ctx.Orders.Add(ord1); ctx.SaveChanges(); foreach (var item in itemList) { item.OrderID=ord1.OrderId; ctx.OrderItems.Add(item); ctx.SaveChanges(); } } } 无效:

OrderID

这是可以立刻完成的吗?或者我是否必须先插入订单,将curl -X POST -H "Content-type:application/json" -u "USERNAME":"PASSWORD" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/CLUSTER_ID/solr/COLLECTION_NAME/schema/analysis/synonyms/english" --data-binary "["ARS","Argentinian Peso"]" 返回给调用程序,然后插入项目?

1 个答案:

答案 0 :(得分:0)

这样说:

您的Order课程应该:

public class Order
{
    public int Id { get; set; }
    // all rest

    public virtual ICollection<OrderItem> Items { get; set; } // here is the trick
}

[HttpPost]
public IHttpActionResult PostItemToOrder(myClass.Order ord1, List<myClass.OrderItem> itemList)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    using (MyContext ctx = new MyContext())
    {
        var order = ord1;
        order.Items = itemList;

        ctx.Orders.Add(order);
        ctx.SaveChanges();
    }
}