【问题标题】:Breeze not getting metadata automaticallyBreeze 没有自动获取元数据
【发布时间】:2014-04-28 23:20:52
【问题描述】:

The Breeze documentation 说:

此 [MetadataStore.FetchMetadata] 调用由 Breeze 在尝试对远程服务执行首次查询之前自动进行

但我正在打这样的电话:

function getBags() {

    var bags;
    var query = breeze.EntityQuery.from('Bags');

    return manager.executeQuery(query).then(querySucceded, _queryFailed);

    function querySucceded(data) {
        bags = data.result;
        logSuccess("Retrieved Bag Data")
        return bags;
    }
}

function _queryFailed(error) {
    logError(config.appErrorPrefix + "Query Failed: " + error.message);
    throw error;
}

当我这样做时,我得到了这个错误:

“无法通过名称找到‘类型’:‘Bag:#DataAccess’。请务必先执行查询或调用 fetchMetadata。”

作为_queryFailederror.message的值。

注意:我知道它正在连接到我的 OData 服务,因为如果我为查询添加随机的东西,我会得到一个找不到的资源:

未找到片段“Bagsasdfas”的资源。;

我正在使用 HotTowel.Angular 和 HotTowel.Angular.Breeze nuget 包。唯一的区别是我直接连接到 WCF 数据服务 (OData)。

在我调用查询之前我确实有这些调用:

breeze.config.initializeAdapterInstances({ dataService: "OData" });
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);

有人知道为什么 Breeze 不会为此自动获取元数据吗?

【问题讨论】:

  • 你试过调用 fetchMetadata 吗?

标签: javascript odata breeze wcf-data-services


【解决方案1】:

我找到了解决此问题的方法。 Breeze 正在获取元数据。

但 Breeze 有一个大部分未记录的 OData 要求,它不属于 OData 规范:

在元数据中,Schema Namespace(位于元数据顶部)和 EntitySet EntityType 命名空间(位于 EntityContainer 下)必须相同。

感谢 Brian Noyes 的 Pluralsight 课程让我知道这一点。

注意:这适用于 OData 的 WCF 数据服务版本。对于 Web API OData,您的里程可能会有所不同。

我能够通过使包含我的实体框架模型的项目与模型的 (edmx) 命名空间具有相同的名称和命名空间来实现这一点。

您可以通过在设计器中右键单击并选择属性来设置edmx的命名空间(命名空间是属性之一)。

一旦我将项目(以及其中的所有文件)从名称“DataAccess”更改为我的 edmx 命名空间的名称,Breeze 就开始正常工作了。

【讨论】:

  • 我更新了文档以引起人们对这个问题的关注……以及 Web API OData 实现的许多其他令人不安的行为。 Check it out
【解决方案2】:

我已经为 Breeze 提交了这个错误,它解决了这个问题:

$metadata handling: entity types in separate schema from container not supported #96

我认为 Breeze 需要 EntityType 命名空间来匹配 Schema 命名空间是不正确的 - 我认为这是一个错误。

修复是 1 行修复,您可以在此处找到: https://github.com/johncrim/breeze.js/commit/9caa76a0de903e08083f600a2a23b9203ef87b49

如果你愿意,你可以使用https://github.com/johncrim/breeze.js,它只在当前的breeze.js master 之上包含那个补丁。但请注意,Breeze:master 后面已经有 4 次提交了。

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多