Breeze.js - 如何创建/添加子对象到我正在创建的父对象?

时间:2013-08-13 08:01:06

标签: breeze

鉴于以下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中?

1 个答案:

答案 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());
}