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 № 1Tak 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 }));
});