我有三个实体:selected_spo
,selected_product
,selected_stock
。
我需要更新现有实体selected_stock
中的FK,以便将其链接到新创建的实体new_spoxs
。
new_spoxs
具有包含实体selected_spo
和selected_product
如果我在完成作业后立即拨打myapp.applyChanges()
,那么整个更新过程将进入一个非常奇怪的状态。
新创建的实体new_spoxs
将保存到数据库,但不会创建FK selected_stock.supplier_po_x_stocks
。
Promise [Function onError]
中没有错误myapp.applyChanges().then...
用户界面一直告诉我有未保存的更改,但保存更改按钮没有效果。
我还试图通过更多步骤来解决这个问题。
首先创建新实体,执行myapp.applyChanges()
,更新FK链接selected_stock.supplier_po_x_stocks = new_spoxs;
,然后再做另一个myapp.applyChanges()
。
如果没有这种延迟,这也是不成功的。
如果我在代码中看到延迟,它只能起作用! 这完全不行。
我哪里错了?
或者这可能是LightSwitch中的一个错误?!
var p_spo = myapp.activeDataWorkspace.storeData.supplier_poes_SingleOrDefault(id_spo_selected);
var p_product = myapp.activeDataWorkspace.storeData.products_SingleOrDefault(id_product_selected);
var p_stock = myapp.activeDataWorkspace.storeData.stocks_SingleOrDefault(id_stock_selected);
var promises_to_execute = [p_spo, p_product, p_stock];
var promises_executor = promises_to_execute.map(function (_p) {
return _p.execute();
});
WinJS.Promise.join(promises_executor).then(function (promises_result) {
var selected_spo = promises_result[0].results[0];
var selected_product = promises_result[1].results[0];
var selected_stock = promises_result[2].results[0];
//Next create a new supplier_po_x_stocks entity
//var new_spoxs = new myapp.supplier_po_x_stock();
var new_spoxs = myapp.activeDataWorkspace.storeData.supplier_po_x_stocks.addNew();
new_spoxs.product = selected_product;
new_spoxs.supplier_po = selected_spo;
new_spoxs.qty_requested = qty_to_be_ordered;
new_spoxs.qty_entered = 0;
//This is not working without WinJS.Promise.timeout(1000) ... !!! NOT OK !!!
selected_stock.supplier_po_x_stocks = new_spoxs;
WinJS.Promise.timeout(1000).then(function () {
myapp.applyChanges().then(
function () {
screen.v_spo_products_to_be_ordereds.refresh();
msls.showMessageBox('Save ok');
},
function (err) {
msls.showMessageBox(JSON.stringify(err, null, 4));
});
});
}, function (err) {
msls.showMessageBox(JSON.stringify(err, null, 4));
});