【问题标题】:How to block EntityQuery to call metadata如何阻止 EntityQuery 调用元数据
【发布时间】:2016-05-07 05:01:42
【问题描述】:

我正在关注 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);
        }`

`

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

错误:

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

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

请纠正我。

谢谢。

哈里·C

【问题讨论】:

    标签: metadata breeze


    【解决方案1】:

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

    【讨论】:

    • 这是完美的解决方案。谢谢你的帮助:)
    猜你喜欢
    • 2019-01-08
    • 2011-08-18
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多