2014-01-09 62 views
0

我想取一个集合中的OData服务的细节,如下面的网址 http://my.company.com/odata/Employee(“1234”)/细节撷取细节

我试着用以下的代码这样做。不确定fromEntityKey是否是正确的做法或其他。

manager = new breeze.EntityManager(collectionData.serviceName); 
var empType = manager.metadataStore.getEntityType("Employees"); 
var entityKey = new EntityKey(empType, '1234'); 
var query = EntityQuery.fromEntityKey(entityKey); 

但它给了我一个错误“请务必执行查询或先调用fetchMetadata。”

我也试过从this link。但我仍然一样。

任何人都可以帮助我吗?

+0

你在哪里定义你的元数据? –

回答

1

您不能使用manager.metadataSote.getEntityType(“Employees”),直到从服务器检索到元数据为止。默认情况下,这发生在第一次查询操作期间,但是您的代码在获取元数据之前尝试使用元数据。

此外,我认为您将资源“Employees”的名称与资源返回的实例的类型(可能是“Employee”)混淆。我还会检查你的密钥的数据类型是数字还是字符串。下面的例子假定它的数字(不像你的例子,其中键的数据类型可能是一个字符串,因为你引用了它)。

所以,你有两种方法,要么强制元以获取您撰写之前,你的查询,例如:

manager = new breeze.EntityManager(serviceName); 
manager.fetchMetadata().then(function() { 
    var empType = manager.metadataStore.getEntityType("Employee"); 
    var entityKey = new EntityKey(empType, 1); 
    var query = EntityQuery.fromEntityKey(entityKey); 
    // if you want to also see the queries details 
    query = query.expand("Details"); 
    return manager.executeQuery(query); 
}).then(function (data) { 
    var results = data.results; 
    ok(results.length === 1, "should have returned a single record"); 
    var emp = results[0]; 
)); 

或者,如果你知道“关键”的字符串名称(“ID”中下面的例子)字段,直接使用它

manager = new breeze.EntityManager(serviceName); 
var query = EntityQuery.from("Employees") 
    .where("Id", "==", 1) 
    .expand("Details"); 
manager.executeQuery(query).then(function(data) { 
    var results = data.results; 
    var emp = results[0]; 
}); 
+0

我得到另一个错误,当我取它 错误是[链接](http://pastebin.com/BvYPBaY9) 顺便说一句我的webservices响应是XML格式,它被提取罚款。 – gibsosmart