2013-05-15 1 views
0

Что работает:

В Breeze я могу выполнить этот запрос:Breeze & OData: Проблема расширения коллекции

Q1

breeze.EntityQuery.from('accounts').where('id', 'eq', account_id) 

который приводит этот запрос:

R1

http://localhost:8000/odata/findash.svc/accounts 
    ?$filter=id eq 'NTE5M2UxMzQzMmY3MDAxYzE1MDAwMDAx' 

, который возвращает корректные данные, за исключением того, что операции собственности выглядит следующим образом:

transactions: { 
    __deferred: { 
     uri: "http://localhost:8000/odata/findash.svc/accounts('NTE5M2UxMzQzMmY3MDAxYzE1MDAwMDAx')/transactions" 
    } 
} 

Я пытался ударять URI при сделках .__ deferred.uri в браузере

R1.1

http://localhost:8000/odata/findash.svc/ 
    accounts('NTE5M2UxMzQzMmY3MDAxYzE1MDAwMDAx')/transactions 

, и он отвечает сделками, которых я ожидал бы.

Что не работает:

Чтобы попробовать и получить этот список транзакций через Breeze переделывает приведенный выше запрос с расширением пунктом как так:

Q2

breeze.EntityQuery.from('accounts') 
    .where('id', 'eq', account_id).expand('transactions') 

который приводит к этому запросу:

R2

http://localhost:8000/odata/findash.svc/accounts 
    ?$filter=id eq 'NTE5M2UxMzQzMmY3MDAxYzE1MDAwMDAx'&$expand=transactions 

, который генерирует ошибку 500.

Я также попробовал этот запрос: Breeze

Q3

breeze.EntityQuery.from('transactions') 
    .expand('account').where('account.id', 'eq', account_id) 

, который также генерирует ошибку 500.

Что мне нужно знать:

Я пытаюсь исключить Breeze, прежде чем погрузиться в сервис OData, который построен на узле + MongoDB + JayData.

Единственным отличием между R1 и R2 выше является добавление &$expand=transactions. R1 работает, а R2 приводит к ошибке 500. Если R2 является допустимым запросом OData, тогда мне нужно сосредоточить свои усилия по устранению неполадок на моей JimData-модификации. Проблема в том, что я новичок в Breeze, OData & JayData, так что у меня проблемы с сужением моего поиска.

Для справки, мой контекст JayData.js находится здесь:

$data.Class.define("$findash.Types.Account", $data.Entity, null, { 
    id: { type: "id", key: true, computed: true }, 
    name: { type: "string" }, 
    status: { type: "string" }, 
    notes: { type: "string" }, 
    transactions: { type: "Array", elementType: "$findash.Types.Transaction", inverseProperty: "account" } 
}, null); 
$data.Class.define("$findash.Types.Transaction", $data.Entity, null, { 
    id: { type: "id", key: true, computed: true }, 
    account: { type: "$findash.Types.Account", inverseProperty: "transactions" }, 
    payee: { type: "string" }, 
    memo: { type: "string" }, 
    amount: { type: "int" } 
}, null); 
$data.Class.define("$findash.Types.FinanceContext", $data.EntityContext, null, { 
    accounts: { type: $data.EntitySet, elementType: $findash.Types.Account }, 
    transactions: { type: $data.EntitySet, elementType: $findash.Types.Transaction } 
}, null); 
$findash.Types.FinanceContext.generateTestData = function (context, callBack) { 
    context.accounts.add(new $findash.Types.Account({ 
     name: 'Checking', 
     status: 'Active', 
     notes: '<p>Notes lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus mauris quam, elementum in tincidunt id, mollis eget urna. Nulla fermentum est id risus venenatis malesuada. Quisque sed ipsum at nisl malesuada dictum vitae nec libero.</p><p>Aenean consectetur, purus eu semper feugiat, purus lacus semper nibh, at luctus ipsum metus non justo. Donec justo mi, rutrum a scelerisque sed, feugiat vel quam. Etiam justo nisi, vehicula ac congue vitae, ultricies non quam. Aliquam a velit in mauris luctus elementum. Praesent sollicitudin quam mattis velit sodales vitae feugiat felis volutpat.</p>', 
     transactions: [ 
      new $findash.Types.Transaction({ 
       payee: 'Shell Gas', 
       memo: 'Checkcard Transaction', 
       amount: -3500 
      }), 
      new $findash.Types.Transaction({ 
       payee: 'Kroger', 
       memo: 'Checkcard Transaction', 
       amount: -9000 
      }), 
      new $findash.Types.Transaction({ 
       payee: 'Papa Murphy\'s', 
       memo: 'Checkcard Transaction', 
       amount: -1500 
      }) 
     ] 
    })); 
    context.accounts.add(new $findash.Types.Account({ 
     name: 'Savings' 
    })); 
    context.accounts.add(new $findash.Types.Account({ 
     name: 'Power Company' 
    })); 
    context.accounts.add(new $findash.Types.Account({ 
     name: 'Gas Company' 
    })); 
    context.accounts.add(new $findash.Types.Account({ 
     name: 'Cable Company' 
    })); 
    context.accounts.add(new $findash.Types.Account({ 
     name: 'Water Company' 
    })); 
    context.accounts.add(new $findash.Types.Account({ 
     name: 'Trash Service' 
    })); 
    context.saveChanges(function (count) { 
     if (callBack) { 
      callBack(count); 
     } 
    }); 
}; 
module.exports = exports = $findash.Types.FinanceContext; 

ответ

0

Можете ли вы разместить код для соответствующих разделов модели на стороне сервера? Это выглядит как проблема на стороне сервера с определением модели или как она отображается через OData.

Настоящий тест заключается в том, чтобы попытаться задействовать услугу OData без участия Breeze. Я предполагаю, что вы получите ту же ошибку. Если нет, то это ошибка Бриза. Если это так, вам необходимо просмотреть свой сервис OData.

+0

Я обновил исходный вопрос. –

+0

Вы пробовали вызов OData без Бриза? Вы уверены, что JayData поддерживает OData «expand»? –

+0

Привет, я из JayStack, создатель JayData. JayData Server поддерживает расширение только с помощью драйвера Pro mongodb. Pro являются бесплатными для некоммерческого использования и платной рекламы для коммерческого использования. Он стоит 250 usd, но предоставляет другие приятные функции, а не только навигацию, а также гео-поиск, обработку индексов и профессиональную поддержку. –