如何阻止EntityQuery调用元数据

时间:2016-05-06 20:17:54

标签: metadata breeze

我在John爸爸的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集合以获取更多详细信息

执行查询时是否有任何限制元数据调用的方法。

请纠正我。

谢谢。

Hari C

1 个答案:

答案 0 :(得分:0)

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