2016-05-06 17 views
0

Ich folge SPA von John Papa, entwickelte ich eine Beispielanwendung mit Hottowel, Angular und Breeze.Wie man EntityQuery blockiert, um Metadaten aufzurufen

Auf der Anwendungslast ich Abrufen des MetaDataStore

function fetchMetadataOnPageLoad() 
{ 
    var store = manager.metadataStore; 
      return store.fetchMetadata(serviceName) 
      .then(gotMetadata) 
      .catch(handleFail); 
} 

In dem obigen Schritt wird die Metadaten von dem Server geladen werden.

Dann navigiert ich bis zu einem gewissen Seite und versuchen, die Daten, die durch folgende Abfragemethode

function GetAllUsers() 
     { 
      manager = emFactory.newManager(); 
      var query = EntityQuery.from('users'); 
      manager.executeQuery(query) 
         .then(querySucceeded, _queryFailed); 
     }` 

`

Dann die folgende Ausnahme ich erhalte, da die Abfrage ruft den Server-Metadaten zweimal zu holen, bevor Ausführung, aber ich habe bereits die Metadaten auf dem Pageload abgerufen.

Fehler:

Metadaten Abfrage fehlgeschlagen für: breeze/Breeze/Metadaten. Metadaten können nicht analysiert oder importiert werden: In diesem MetadataStore existiert bereits ein Typ. Serverseitige Fehler gefunden - Weitere Informationen finden Sie in der entityErrors-Auflistung für dieses Objekt.

Gibt es eine Möglichkeit, den Metadatenaufruf während der Ausführung der Abfrage einzuschränken?

Bitte korrigieren Sie mich.

Vielen Dank.

Hari C

Antwort

0

Wenn Sie den EntityManager erstellen, sagen, es werden Sie die Server-Metadaten abrufen manuell:

var dataService = new breeze.DataService({ 
    serviceName: 'api/Datamart', 
    hasServerMetadata: false // solution here - will prevent metadata call on 1st query 
}); 
var store = new breeze.MetadataStore(); 

store.fetchMetadata(dataService.serviceName) 
    .then(function() { 
     manager = new breeze.EntityManager({ 
      dataService: dataService, 
      metadataStore: store 
    }); 
}; 
+0

Die perfekte Lösung ist. Danke für Ihre Hilfe :) –