/ / BreezeJS - wyraźne metadane i pamięć podręczna - bryza

BreezeJS - jasne metadane i pamięć podręczna - bryza

W moim rozwiązaniu klienckim istnieje potrzeba częściowego odświeżenia z serwera. Czy jest możliwe usunięcie wszystkich zdefiniowanych konstruktorów i całej pamięci podręcznej?

nawet próbowałem

 dataService = new breeze.DataService(breezeDataServiceSettings),
ms = new breeze.MetadataStore();
manager = new breeze.EntityManager({ dataService: dataService , metadataStore: ms});

przy każdym odświeżeniu

Odkryłem, że muszę wyczyścić yhe entityType w prototypie

var ctor = ctorFactory.createCtor(allTypes[type].shortName),
store = manager.metadataStore;

ctor.prototype.entityType = undefined;
store.registerEntityTypeCtor(allTypes[type].shortName, ctor);

Odpowiedzi:

3 dla odpowiedzi № 1

Tak właściwie, new breeze.EntityManager(...) zawsze tworzy czystego menedżera z pustym metadataStore. Spójrz na ruch sieciowy i zobaczysz, że nowy menedżer żąda metadanych z serwera przy pierwszym zapytaniu.

Musisz chcesz uniknąć to skrzypiące czyste zachowanie ... i zwykle chcę uniknąć tego zachowania.

Zwykle, jeśli raz nabyłem metadane i zainicjowałem tym menedżerem, chcę utworzyć nowych menedżerów, którzy są skonfigurowani w ten sam sposób.

// manager2 has manager1"s settings but not its cache contents
var manager2 = manager1.createEmptyCopy();

Ale myślę, że w twoim przypadku chcesz domyślnie.


0 dla odpowiedzi nr 2

spróbuj:

var controllerName = "...",
serviceUrl = "https://..../" + controllerName,
metadataUrl = serviceUrl + "/Metadata",
entityManager = new breeze.EntityManager();
$.ajax({ url: metadataUrl, type: "GET", dataType: "text" })
.then(metadataJson => {
entityManager.metadataStore.importMetadata(metadataJson);
entityManager.metadataStore.addDataService(new breeze.DataService({ serviceName: serviceUrl }));
});