如何阻止 EntityQuery 调用元数据

How to block EntityQuery to call metadata

我正在关注 John papa 的 SPA,我使用 Hottowel、Angular 和 Breeze 开发了一个示例应用程序。

在应用程序加载时,我正在获取元数据存储

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

在上面的步骤中,元数据是从服务器加载的。

然后我导航到某个页面并尝试通过以下查询获取数据

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

`

然后我收到以下异常,因为查询在执行前两次调用服务器元数据方法,但我已经在页面加载中获取了元数据。

错误:

元数据查询失败:breeze/Breeze/Metadata。无法解析或导入元数据:此 MetadataStore 中已存在类型。;遇到服务器端错误 - 有关更多详细信息,请参阅此对象的 entityErrors 集合

在执行查询时有什么方法可以限制元数据调用吗?

请指正。

谢谢。

哈里·C

创建 EntityManager 时,告诉它您将手动检索服务器元数据:

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
    });
};