使用Employee(';1234';)获取Breeze中实体的详细信息

使用Employee(';1234';)获取Breeze中实体的详细信息,breeze,Breeze,我希望在Odata服务中获取集合的详细信息,如以下URL ('1234')/详细信息 我尝试使用以下代码来执行此操作。不确定fromEntityKey是正确的操作还是其他操作 manager = new breeze.EntityManager(collectionData.serviceName); var empType = manager.metadataStore.getEntityType("Employees"); var entityKey = new EntityKey(empT

我希望在Odata服务中获取集合的详细信息,如以下URL ('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”

我也试过了。但我还是一样

有人能帮我吗?

在从服务器检索元数据之前,您不能使用manager.metadatastore.getEntityType(“员工”)。默认情况下,这在第一次查询操作期间发生,但您的代码正在尝试在检索元数据之前使用元数据

另外,我认为您混淆了资源“Employees”的名称和资源返回的实例类型,可能是“Employees”。我还将检查密钥的数据类型是数字还是字符串。下面的示例假定它是数值型的(与您的示例不同,您的示例假定键的数据类型是字符串,因为您引用它)

因此,有两种方法,一种是在编写查询之前强制提取元数据,如下所示:

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];
));
或者,如果您知道“key”(下例中为“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];
});

你在哪里定义元数据?我在获取元数据时遇到另一个错误。顺便说一句,我的webservices响应是XML格式的,并且获取的很好。