2014-01-09 3 views
0

Я хочу получать детали из коллекции в услугах OData как следующий URL http://my.company.com/odata/Employee («1234»)/ДеталиИзвлечение сведения о сущности в Бриз с использованием Employee («1234»)

Я пытался со следующими код для этого. Не уверен, правильнее ли делать из EntityKey или что-то еще.

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 («Сотрудники») до тех пор, пока метаданные не будут получены с сервера. По умолчанию это происходит во время первой операции запроса, но ваш код пытается использовать метаданные до их восстановления.

Кроме того, я думаю, что вы путаете имя своего ресурса «Сотрудники» с типом экземпляров, возвращаемых вашим ресурсом, возможно, «Сотрудник». Я также хотел бы проверить, является ли тип данных вашего ключа числовым или строковым. В приведенном ниже примере предполагается его числовое значение (в отличие от вашего примера, где тип данных ключа, по-видимому, является строкой, потому что вы цитируете его).

Так у вас есть два подхода, либо заставить метаданные быть неправдоподобными, прежде чем составить запрос, как это:

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) BTW мой ответ веб-сервисов в формате XML, и он получен в порядке. – gibsosmart

Смежные вопросы