我的数据库中有两个表,我通过Web API填写:
Orders
________
OrderID
OrderDate
OrderStatusID
和
OrderItems
___________
OrderID
ItemID
ItemVersionID
ItemNote
ItemSortOrder
我需要在两个表中插入Order
和该订单的所有项目。 OrderID
是数据库生成的标识字段,用于将数据插入OrderItems
表。
OrderItems
表的主键是复合键(OrderID, ItemID, ItemVersionID)
,这很重要,因为相同的订单可以包含多个具有相同ID但版本ID不同的商品。
我想知道是否必须单独添加Order
和OrderItems
数据,或者可以在单个控制器功能中添加。{/ 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"]"
返回给调用程序,然后插入项目?
答案 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();
}
}