我有三个轻而易举的实体,我的应用程序是一个长表单,它在去服务器进行保存之前一次将记录添加到所有三个表中。Drivers & Vehicles 表中有两个与 AutoLead 有关系,需要 AutoLead 表中的 AutoLeadId,该表在客户端一次全部输入。
所以我有一个表格,用户在 AutoLead 中输入信息,然后以一种无缝的形式将记录添加到 Drivers 和 Vehicles 表中。如何让 Id 分配给 Drivers 和 Vehicles 而不先将保存分开,先保存 AutoLead,返回新的 Id,然后将其分配给 Drivers 和 Vehicles,然后再次保存。我想避免多次访问服务器只是为了生成车辆和驾驶员导航属性的 ID。
据我了解,微风应该能够使用它创建的客户端的临时 ID 来修复这些 ID。但是当我去保存它并没有改变这些ID。根据:http ://www.breezejs.com/documentation/navigation-properties
如果我尝试直接使用对象设置导航属性,则会收到导航属性未定义的错误(请参见下面的代码)。使用另一种方法,如果我尝试直接在他们的 ID 上设置外键,我会从 SQL 收到外键错误,因为它试图将 -1 推送到服务器(临时 ID)。我知道我一定做错了什么。这是我的一些代码:
创建新的客户端实体:
// New entity creation functions
var createAutoLead = function() {
return manager.createEntity('AutoLead');
};
var createAutoLeadDriver = function () {
return manager.createEntity('AutoLeadDriver');
};
var createAutoLeadVehicle = function () {
return manager.createEntity('AutoLeadVehicle');
};
// Save Function Loop through all drivers and vehicles and set
their autoLeadId's before saving
var saveAutoLead = function (newAutoLead, autoLeadDrivers, autoLeadVehicles) {
// Loop through drivers and set the foreign keys
for (var i = 0; i < autoLeadDrivers().length; i++) {
autoLeadDrivers()[i].autoLead(newAutoLead);
}
// Loop through drivers and set the foreign keys
for (var i2 = 0; i2 < autoLeadVehicles().length; i2++) {
autoLeadVehicles()[i2].autoLead(newAutoLead);
}
manager.saveChanges()
.then(saveSucceeded)
.fail(saveFailed);
function saveSucceeded() {
return logger.log('Debug Message', 'Quote saved successfully', null, system.getModuleId(datacontext),
true, config.growlTypes.success);
}
return logger.log('Debug Message', 'Quote saved successfully', null, system.getModuleId(datacontext),true, config.growlTypes.success);
};