0

我有一个小部件的主文件,并且该小部件的多个版本可以共享相同的 widgetmaster。所以数据库上有widgetMasters 和widgetVersions 表。

widgetMaster ID 是一个标识整数字段,并具有一个 widgetversions 集合。

Widgetversion 有一个外键指向它所属的 widgetMaster ID。

我的网站上有一个“创建新小部件”表单。这是在按下按钮后加载的,它使用“createEntity”为 widgetMaster 和 widgetVersion 创建空白实体。这个想法是在创建版本“001”的同时创建父“widgetMaster”。master 只包含描述和一些类别字段。版本包含与这个版本的小部件相关的特定字段,最终可能有几十个版本。

用户填写所有字段并按“保存”。

此时我验证表单字段,如果一切正常,继续通过“datacontext.saveChanges()”保存实体。这是在我的“创建新”表单视图的视图模型中完成的。

这在创建widgetMaster时工作正常,但我认为我需要更好地控制这个过程......我需要在widgetVersion实体上设置外键ID由“savechanges”创建但在它尝试保存之前小部件版本实体。

由于“datacontext.saveChanges()”似乎是一个一站式商店,我完全不知道如何使用刚刚保存的 widgetmaster 中新创建的 ID 来保存 widgetVersion 实体。

4

1 回答 1

0

那好吧。我不能说这是否是最好的方法,但这就是我实现它的方法。有关更多信息,请参阅此 stackoverflow 问题:Breeze bug?即使在 savechanges() 中仅指定了主要实体,它仍在尝试添加相关实体

我的视图模型保存方法(在允许用户填充新实体中的字段的表单条目视图上)现在是这样的:

    var save = function () {
        isSaving(true);
        //1st save widgetMaster
        return datacontext.saveChanges(new Array(newWidgetMaster())).then(function (saveResult) {
            //set version entity to have master id
            newWidgetVersion().widgetMasterID(newWidgetMaster().id());
            return datacontext.saveChanges(new Array(newWidgetVersion())).fin(complete);
        }).fail(function (e) {
            //do something with the alert
        });

        function complete() {
            isSaving(false);
        }
    };
于 2013-09-24T20:05:10.523 回答