【问题标题】:Errors when using Breeze with EF将 Breeze 与 EF 一起使用时出错
【发布时间】:2013-05-16 02:08:53
【问题描述】:

我正在使用带有 EF 的微风。我的 Web API 正在返回一个“对象”,它由我用来绑定到网格的多个链接实体的属性组成。稍后我将需要更新一些属性,并且我想缓存数据,因此轻而易举。我正在使用 noDB 示例来创建自定义实体。

第一个问题是,微风似乎期望在 addEntityType 方法中传递一个名为 name 的属性,否则会抛出错误 The 'structuralTypeName' parameter must be a 'string'。

第二个问题是第 4742 行微风中对结构类型的调用。_fixup 似乎抛出了以下错误 Object # has no method '_fixup' 虽然我可以看到该函数存在。

谁能指出我在下面的代码中做错了什么?错误在 addEntityType 调用中。

manager.metadataStore.addEntityType({
            name: "Transcription", shortName: "Transcription", namespace: "Etrans.Data.Models", autoGeneratedKeyType: breeze.AutoGeneratedKeyType.Identity,
            dataProperties: {
                audio: { dataType: DataType.String }, clientID: { dataType: DataType.Int32 }, clientName: { dataType: DataType.String },
                clinicianfirstname: { dataType: DataType.String }, clinicianlastname: { dataType: DataType.String }, Notes: { dataType: DataType.String },
                status: { dataType: DataType.String }, transcriptionid: { dataType: DataType.Int32, isPartOfKey: true }, user: { dataType: DataType.String }
            }

        });
        manager.metadataStore.registerEntityTypeCtor("Transcription", null, customReportFields);

在服务器端,我在一个名为 Etrans.Data 的项目中有数据层。 Web API 调用查询数据层的存储库。在这种情况下,它正在查询一个名为 Transcription (Etrans.Data.Models.Transcription) 的实体和许多链接实体。

【问题讨论】:

    标签: breeze


    【解决方案1】:

    @shai - 我很遗憾您遇到的困惑,这似乎是 BreezeJS 客户端元数据定义 API 演变的结果。但我不完全理解你的建议。

    HotTowel 模板和 HT NuGet 包确实依赖于旧版本的 BreezeJS NuGet 包,它可能有一个 addEntityType 方法,该方法后来发生了变化(我没看过)。我将与 John Papa 一起更新 HT 的内容。

    但我不明白你在告诉人们做什么。如果您保持在其当时官方功能的范围内,则 HT 模板将按交付方式工作。 FWIW,客户端元数据定义当时处于测试阶段,我们说它的 API 可能会改变。它仍在进行中。

    将应用更新到最新版本的依赖包当然会改变一些事情。这就是为什么要升级。

    您是说在您更新到最新的 Breeze NuGet 包后仍然存在问题吗?您是否指出最新的 Breeze NuGet 包(我写的是 1.3.3)和 GitHub 中的最新源之间存在一些差异。那里总是存在一些差异 - GitHub 上的 BreezeJS 总是包含我们最新的想法......其中许多会改变,并且没有一个被批准用于开发用途。我建议人们发送至 stick with official releases

    你是在告诉人们他们不应该使用 HotTowel 吗?为什么?您遇到的问题不在主流功能中(甚至不是HT的官方功能)。

    OTOH,我理解并完全同意将所有 HT 依赖包(包括 Durandal 和 Toastr 以及 Breeze)升级到最新版本的建议。

    感谢您与我们在一起。

    【讨论】:

    • @ward- 我使用热毛巾模板并通过nuget升级到最新的微风包,然后遇到了这个问题。然后我从 git hub 下载了最新的源代码,并且微风的代码库不同。因此我建议从各个来源获取最新的源代码。我没有说过不应该使用微风或热毛巾模板。相反,我是两者的坚定支持者并强烈推荐它们。
    • 很高兴听到您对 HT 的热情不减。我真的很惊讶您发现 GitHub 和当前 v.1.3.3 NuGet w/r/t addEntityType 之间存在差异......因为我没有看到它。我只是将 Jay 的示例(用 shortName 代替 name)粘贴到一个纯 1.3.3 项目中,并且没有出现异常。我想看一个例子来解释为什么你认为人们应该从 GitHub 中提取而不是使用 v 1.3.3 NuGet pkg。不应该是这样的。如果是,我们需要立即修复它。
    【解决方案2】:

    在我的机器上,Breeze 在您调用 addEntityType 时抛出一条错误消息:

    Error configuring an instance of 'EntityType'. Unknown property: 'name'.
    

    基本上,“名称”不是 addEntityType 调用的有效配置参数。所以消除你的'name'属性,这是不需要的,因为微风是从 shortNamenamespace 构建的,你的代码变成:

    manager.metadataStore.addEntityType({
            shortName: "Transcription",
            namespace: "Etrans.Data.Models",
            autoGeneratedKeyType: breeze.AutoGeneratedKeyType.Identity,
            dataProperties: {
                audio: { dataType: DataType.String },
                clientID: { dataType: DataType.Int32 },
                clientName: { dataType: DataType.String },
                clinicianfirstname: { dataType: DataType.String },
                clinicianlastname: { dataType: DataType.String },
                Notes: { dataType: DataType.String },
                status: { dataType: DataType.String },
                transcriptionid: { dataType: DataType.Int32, isPartOfKey: true },
                user: { dataType: DataType.String }
            }
        });
    

    运行良好。

    希望这会有所帮助。

    【讨论】:

    • 当!我刚刚确认了我自己 :-) 你太快了,杰
    • 谢谢你们的回复。正如我在查询中提到的,如果我不使用“name”参数而只使用“shortName”参数,微风会引发以下错误 - “structuralTypeName”参数必须是“字符串”。它命中以下行 4724 。结构类型似乎是被传递的对象。如您所见,它正在寻找一个不存在的名称属性。 proto.addEntityType = function (structuralType) { if (this.getEntityType(structuralType.name, true)) { var xxx = 7; }
    • 我认为您没有运行最新版本的 Breeze 或没有刷新缓存。我们在 Breeze v 1.3.3 上运行了您提到的确切代码,没有问题。
    【解决方案3】:

    致所有使用热毛巾模板的人...建议直接获取最新的 BREEZE 代码,不要使用 NUGET 更新...截至 2013 年 5 月 15 日

    该死的..我只是浪费了一天的时间。 nuget 包源和从brewjs.com 获得的包似乎非常不同。我从breathjs 下载了最新的源,我在之前的评论中提到的行不存在,事实上整个addEntityType 函数是不同的。 ..没有structureType.name!!我确实使用 nuget 更新到最新的稳定源。不确定这是来自热毛巾模板还是来自 nuget。

    【讨论】:

    • 我不太明白。 HotTowel 模板和 nuget 包确实引用了旧版本的 BreezeJS,它可能具有现在不存在的 structuralType.name 属性(客户端元数据定义当时处于测试阶段,我们说 API 可能会发生变化) .
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2021-12-06
    • 2015-07-15
    • 2016-05-04
    相关资源
    最近更新 更多