2014-05-07 1 views
0

У меня 2 менеджеров сущностей:breeze.js Как обмениваться метаданными между 2 менеджеров сущностей

var mgr1 = new breeze.EntityManager('api/app'); 
var mgr2 = new breeze.EntityManager('api/app'); 

Сейчас я получаю метаданные для каждого из них в отдельности, хотя метаданные точно так же. Я вызываю метод выборки явно, чтобы контролировать время загрузки метаданных.

mgr1.fetchMetadata(); 
mgr2.fetchMetadata(); 

Я читал, что могу поделиться метаданными между двумя менеджерами, но я не нашел примера. Из того, что я читал, я думаю, что могу указать метаданные в конструкторе второго менеджера, который ссылается на метаданные 1-го менеджера, но не уверен, как это будет выглядеть. Так что мой код будет выглядеть примерно так:

var mgr1 = new breeze.EntityManager('api/app'); 
mgr1.fetchMetadata(); 
var mgr2 = new breeze.EntityManager({ serviceName: 'api/app', metadata: WHAT_GOES_HERE}); 

Я знаю, что я также должен буду sequnece это с обещаниями, поэтому второй менеджер не построен до 1-го менеджеров имеют свои метаданные загружены.

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

+0

Проверьте образцы - я считаю, что одна из них на странице образцов показывает несколько конфигураций entityManager –

ответ

1

Я никогда не использовал breeze.js раньше, но от того, что я понял из документации (http://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html), что-то, как это должно работать:

var mgr1 = new breeze.EntityManager('api/app'); 
mgr1.fetchMetadata(); 
var mgr2 = new breeze.EntityManager({ 
    serviceName: 'api/app', 
    metadataStore: mgr1.metadataStore 
}); 

Конечно mgr2 должен быть установлен после mgr1.fetchMetadata обещания выполняется, как вы уже сказали в своем вопросе.

2

Вам действительно не нужно получать метаданные для совместного использования одного и того же MetadataStore. Следующие два утверждения являются довольно четким подходом:

var em1 = new breeze.EntityManager('api/app'); 
var em2 = em1.createEmptyCopy(); 

Я не пытаюсь быть умным. Моя точка зрения заключается в том, что MetadataStore, являющийся контейнером метаданных, доступен сразу после создания EntityManager и четко определен до размещения каких-либо метаданных.

Метод createEmptyCopy() «клонирует» менеджера без копирования содержимого его сущности объекта. Скопированные атрибуты включают MetadataStore менеджера и его DataService.

Поскольку менеджеры имеют одинаковые MetadataStore, получение метаданных с помощью либо менеджер сделает трюк.

Ознакомьтесь с документацией по API Breeze для EntityManager и MetadataStore.

+0

Это очень интересно. У меня есть прецедент в моем приложении, где пользователь находится на экране, создавая транзакцию «событие». «Событие» привязано к человеку, но лицо может существовать или не существовать. И БД структурирована таким образом, что человек не может быть создан одновременно с «событием», запись человека должна физически существовать в первую очередь. Поэтому я открываю всплывающее окно, чтобы при необходимости можно было добавить человека. Мне нужно, чтобы эта вторая транзакция была полностью завершена независимо от транзакции «event», поэтому мне нужны отдельные кэши объектов. Я думаю, что конфигурация, которую вы написали выше, позволит это. – mwill

+0

Я передумал это и задался вопросом, возможно ли на бризе сделать «SaveChanges», но указать, какие объекты отправлять на сервер, сохраняя остальные объекты в кеше для более позднего «SaveChanges». Это может быть кандидат на отдельный вопрос. – mwill

+0

Это кандидат на отдельный вопрос. :-) Вы можете ответить на этот вопрос самостоятельно после просмотра API Doc для [saveChanges] (http://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html#method_saveChanges) – Ward