0

给定以下 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 Web 应用程序中(使用 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 对象保存在数据库中?

4

1 回答 1

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());
}
于 2013-08-13T15:23:39.093 回答