我有一个小部件的主文件,并且该小部件的许多版本可以共享相同的widgetmaster。因此db上有widgetMasters和widgetVersions表。
widgetMaster ID是一个标识整数字段,其中包含一个设置的widgetversions图标。
Widgetversion有一个指向它所属的widgetMaster ID的外键。
我的网站上有一个“创建新窗口小部件”表单。按下按钮后加载它,并使用“createEntity”为widgetMaster和widgetVersion创建空白实体。我们的想法是在创建版本“001”的同时创建父“widgetMaster”。主人只包含描述和一些类别字段。该版本包含与此小部件版本相关的特定字段,最终可能有数十个版本。
用户填写所有字段并按“保存”。
此时我验证了表单字段,如果一切正常,继续通过“datacontext.saveChanges()”保存实体。这是在我的“创建新”表单视图的viewmodel中完成的。
这在创建widgetMaster时工作正常,但是我需要更多地控制这个过程我认为......我需要在widgetVersion实体上设置外键AFTER id由“savechanges”创建但是在它尝试之前保存widgetVersion实体。
由于“datacontext.saveChanges()”似乎是一站式商店,我完全不知道如何使用我刚刚保存的widgetmaster中新创建的ID来保存widgetVersion实体。
答案 0 :(得分:0)
好吧那么。我不能说这是否是最好的方式,但这就是我如何实现它。有关更多信息,请参阅此stackoverflow问题:Breeze bug? It's trying to add related entity even though only the primary entity is specified in savechanges()
我的viewmodel保存方法(在表单条目视图上,允许用户填充新实体中的字段)现在是这样的:
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);
}
};