在LightSwitch应用程序中更新实体FK时的奇怪行为

时间:2015-07-16 15:58:28

标签: javascript entity-framework promise visual-studio-lightswitch lightswitch-2013

我有三个实体:selected_sposelected_productselected_stock

我需要更新现有实体selected_stock中的FK,以便将其链接到新创建的实体new_spoxsnew_spoxs具有包含实体selected_sposelected_product

的强制性FK

如果我在完成作业后立即拨打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));
});

0 个答案:

没有答案