我有一个简单的对象模型 公共类许可证 {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string CreationUserId { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string LastModifiedUserId { get; set; }
public string LicenseName { get; set; }
public LicenseType LicenseType { get; set; }
public State State { get; set; }
public DateTime DateIssued { get; set; }
public int ValidFor { get; set; }
}
public class State
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string CreationUserId { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string LastModifiedUserId { get; set; }
[StringLength(2)]
[Required]
public string Name { get; set; }
[Display(Name = "Long Name")]
[Required, StringLength(25)]
public string LongName { get; set; }
}
public class LicenseType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string CreationUserId { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string LastModifiedUserId { get; set; }
[StringLength(100), Required]
public string Description { get; set; }
}
我正在使用热毛巾模板微风,durandal,淘汰赛。 我有一个简单的添加视图模型
var _licenseAdded = false;
var vm = {
states: ko.observableArray(context.states),
licenseTypes: ko.observableArray(context.licenseTypes),
viewAttached: function () {
var self = this;
$('input[name^="date"]').datepicker();
$('#validFor').spinner({
min: 365,
max: 3650,
step: 30
});
log('add Attached', null, true);
},
activate: function () {
var self = this;
self.original = context.manager.createEntity('License', { licenseName: 'Testing321', dateIssued: moment().format('L') }, null);
log('add Activated', null, true);
},
canDeactivate: function () {
if (_licenseAdded === false) {
return app.showMessage('Are you sure you want to leave this page?', 'Navigate', ['Yes', 'No']);
} else {
return true;
}
},
saveChanges: function () {
$.when(context.saveNewLicense()).done(function () {
_licenseAdded = true;
});
router.navigateTo('home');
},
original: undefined
};
return vm;
这是我的add.html,一切都很好,并且很好地工作直到保存。
当我调用saveChanges时,发送到控制器的saveBundle没有附加导航属性,允许存储正确的State和LicenseType我只得到: saveBundle { “实体”:[ { “Id”: - 1, “CreationUserId”:null, “LastModifiedUserId”:null, “LicenseName”:“new for testing”, “DateIssued”:“2013-03-11T04:00:00Z”, “ValidFor”:0, “entityAspect”:{ “entityTypeName”:“许可证:#Volt.Telecom.Licensing.Models”, “entityState”:“已添加”, “originalValuesMap”:{}, “autoGeneratedKey”:{ “propertyName”:“Id”, “autoGeneratedKeyType”:“身份” } } } ] “saveOptions”:{ “allowConcurrentSaves”:false } }
不要以为我能获得比这更多的香草。为什么会这样?当我在客户端上调试时,state和licenseType navigationProperties都是正确的并且具有正确的值。
答案 0 :(得分:0)
我认为问题在于您的EF模型使用“独立关联”而不是“外键关联”(外键关联是EF默认值)。我们确实需要更好地记录这一假设。
此要求的原因是可以绕过但功能大量丢失,因为客户端上存在的外键允许breeze自动修复可能单独查询的实体之间的关系。
有关更多背景信息,请参阅以下MSDN文章:foreign-keys-in-the-entity-framework