1

我正在使用带有 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) 的实体和许多链接实体。

4

3 回答 3

2

@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 总是包含我们最新的想法......其中许多会改变并且没有一个被批准用于开发用途。我建议人们选择官方发布

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

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

谢谢你和我们在一起。

于 2013-05-15T18:08:53.100 回答
1

在我的机器上,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 }
        }
    });

运行得很好。

希望这可以帮助。

于 2013-05-14T17:03:32.073 回答
0

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

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

于 2013-05-15T02:14:36.693 回答