0
我在我的数据库中有两个表,我通过Web API填充:插入数据到多个表中使用实体框架
Orders
________
OrderID
OrderDate
OrderStatusID
和
OrderItems
___________
OrderID
ItemID
ItemVersionID
ItemNote
ItemSortOrder
我需要插入Order
和所有项目在两张桌子的订单。 OrderID
是数据库生成的标识字段,我需要将数据插入到OrderItems
表中。
OrderItems
表的主键是一个组合键,因为相同的顺序可以包含具有相同ID但具有不同版本ID的多个项目,这一点很重要。
我想知道是否需要单独添加Order
和OrderItems
数据,或者可以在单个控制器功能中添加数据。
下面是我的模型类:
[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
返回给调用程序,然后插入项目?
谢谢你的快速响应!我已更改'公开名单详细信息{get;组; } to'public ICollection Details {get;组; }'并根据您的建议修改了控制器代码,但它仍然无效。可以使用'virtual'关键字在Order模型声明中有所作为? –
ElenaDBA
在你的'OrderItem'类中你有'public virtual order {get;组; }'?上面的代码应该没有问题。 List itemList'列表中有什么? –
不,我没有'公共虚拟Order Order {get;组; }'设置 – ElenaDBA