我试图实现模拟数据服务。我正在注册新的数据类型,用init数据创建一个新的实体,但是在执行查询时,我收到一个错误:“没有可用于此查询的元数据”。我无法弄清楚它为什么会发生。我的实体管理器包含我已注册的数据类型,还包含已创建实体的集合。我以为我的查询失败,因为命名空间,所以我试图查询“标签:#Football.Models” - 相同的结果。此外,我曾试图executeLocally()方法,同样的东西...在breezejs上实现模拟数据服务(查询失败)
步骤:
1)创建清风DataService的,数据存储和管理。
2)创建新的元数据类型并将其添加到数据存储。
3)创建注册类型的新实体,并通过一些模拟数据初始化它。
4)执行查询获取实体集合; 故障在第4步 - 出现错误:“错误:没有可用于该查询的元数据”
这里是我的代码:
//1st step
var mockDataService = new breeze.DataService({
serviceName: "mockDataService",
hasServerMetadata: false
});
var mockMetadataStore = new breeze.MetadataStore(
{
namingConvention: breeze.NamingConvention.camelCase
});
var queryOptions = new breeze.QueryOptions({
fetchStrategy: breeze.FetchStrategy.FromLocalCache
});
var entityManager = new breeze.EntityManager({
dataService: mockDataService,
metadataStore: mockMetadataStore,
queryOptions: queryOptions
});
// 2nd step
var et = new breeze.EntityType({
shortName: "Tag",
namespace: "Football.Models",
autoGeneratedKeyType: breeze.AutoGeneratedKeyType.Identity,
defaultResourceName: "tags"
});
et.addProperty(new breeze.DataProperty({
name: "id",
dataType: breeze.DataType.Int32,
isNullable: false,
isPartOfKey: true
}));
et.addProperty(new breeze.DataProperty({
name: "name",
dataType: breeze.DataType.String,
isNullable: false
}));
mockMetadataStore.addEntityType(et);
mockMetadataStore.registerEntityTypeCtor("Tag", null);
//3rd step
etType = mockMetadataStore.getEntityType("Tag");
var newTag = etType.createEntity({id:1,name:"tag"});
entityManager.addEntity(newTag);
// 4th step
var a = breeze.EntityQuery
.from("Tag")
.using(entityManager).execute()
.then(querySucceed).fail(function(err) {
alert(err);
// and i got an error:
// Error: There is no metadata available for this query
});;
非常感谢,现在它工作! – 2013-03-25 22:28:15
是的,在将明确的数据服务添加到元数据存储时存在相当混乱的事情。我认为他们是在我将metadataStore和dataService引用传递给entityManager后连接的。这是很好的,你要删除这个“额外”的代码。我猜 - 你不会删除这种方法的原因是让metadataStore与多个数据服务器连接,这是一个很好的功能。不是在我的情况下,但无论如何=) – 2013-03-25 22:50:54