鉴于以下EF模型:
public class Order
{
public int OrderId { get; set; }
public string CustomerName { get; set; }
public virtual ICollection<OrderDetail> OrderDetails { get; set; }
...
}
// OrderDetail has a composite key of OrderId and ProductId
public class OrderDetail
{
public int OrderId { get; set; }
public int ProductId { get; set; }
public int Quantity { get; set; }
...
}
在我的MVC4网络应用程序中(使用HotTowel SPA模板--Durandal,Breeze.js,Knockout等),我创建了一个用于创建新订单和添加/删除OrderDetail项目的视图。
在datacontext.js中,我有以下内容:
var createOrder = function() {
return manager.createEntity('Order');
};
在我的viewmodel orderadd.js中,我正在调用createOrder:
order = ko.observable();
activate = function() {
initLookups();
order(datacontext.createOrder());
}
问题:如何在Order对象中创建/添加新的OrderDetail项目并将整个新的Order对象保存在DB中?
答案 0 :(得分:1)
与创建订单的方式相同,只需将导航属性添加回订单明细的订单即可。
var createOrderDetail = function() {
return manager.createEntity('OrderDetail');
};
var order = ko.observable();
activate = function() {
initLookups();
order(datacontext.createOrder());
var orderDetail = datacontext.createOrderDetail();
orderDetail.order(order());
}
另一种选择是在创建实体orderDetail时设置顺序,但我发现Knockout在创建实体时感到生气并且没有分配所需的所有值风景。这种方式的一个例子是 -
var createOrderDetail = function(order) {
return manager.createEntity('OrderDetail', { order: order });
};
var order = ko.observable();
activate = function() {
initLookups();
order(datacontext.createOrder());
var orderDetail = datacontext.createOrderDetail(order());
}