我正在使用基于 SPA 的应用程序作为概念证明并且遇到问题。
我的 SPA 使用的是 BreezeJS、Durandal、Knockout 和 WebApi。对于数据访问层,我以代码优先的方式使用 Entity Framework 5。
我有两个类,如下:
public class TodoList : IEntity
{
public TodoList()
{}
public int Id { get; set; }
public string Name { get; set; }
public ICollection<TodoItem> Items { get; set; }
}
public class TodoItem : IEntity
{
public int Id { get; set; }
public string Description { get; set; }
public DateTime? DueDate { get; set; }
public TodoList TodoList { get; set; }
public int? TodoListId { get; set; }
}
然后在我的网络项目中,我创建了一个视图和视图模型来列出所有的 TodoLists(视图模型如下 - 我已经将代码压缩到这个视图模型中,因为我实际上使用的是来自 BreezeJS 样本的存储库和工作单元模式网站):
define(['services/entitymanagerprovider', 'plugins/router'],
function (entitymanagerprovider, router) {
var todoLists = ko.observableArray();
var provider = entitymanagerprovider.create();
var manager = provider.manager();
function activate() {
var entityTypeName = "TodoList";
var resourceName = "data/TodoLists";
if (entityTypeName) {
entityType = manager.metadataStore.getEntityType(entityTypeName);
entityType.setProperties({ defaultResourceName: resourceName });
manager.metadataStore.setEntityTypeForResourceName(resourceName, entityTypeName);
}
var query = breeze.EntityQuery
.from(resourceName);
manager.executeQuery(query)
.then(function (data) {
return todoLists(data.results);
})
.fail(function(error) {
console.log(error);
});
}
return {
activate: activate,
todoLists: todoLists
};
});
但是,当我运行该页面时,出现以下错误:
对象 # 没有方法 'getProperty'
我已经调查了这个错误,它发生在 BreezeJS 代码中。我相信我的一个实体没有被 EntityType 包装,这意味着无法调用“getProperty”函数......虽然这只是一个非常粗略的猜测!
我已经在我的数据访问代码中检查了两个对象之间的关系,并且我已经在子对象 (TodoItem) 上公开了外键和父对象。
顺便说一句,我实际上有另一个 SPA 原型使用与上述相同的技术,但它使用的是以前版本的 BreezeJS 和 Durandal。另一个 SPA 可以工作,但是当我使用目前正在处理的 SPA 时出现错误。我目前使用的版本是:
BreezeJS:1.4.2(元数据版本 1.0.5)
杜兰达尔:2.0.0
任何帮助将不胜感激!谢谢。