使用Breeze和EF时出错

时间:2013-05-14 00:58:11

标签: breeze

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

第一个问题是breeze似乎期望在addEntityType方法中传递一个名为name的属性,或者它会抛出一个错误'structuralTypeName'参数必须是'string'。

第二个问题是在第4742行的breeze中调用structuralType._fixup似乎抛出了以下错误对象#没有方法'_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)的实体和许多链接的实体。

3 个答案:

答案 0 :(得分: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始终保留着我们最新的想法......其中许多都会改变,而且没有一个被批准用于开发。我会建议人们tick with official releases

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

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

感谢您和我们一起待在那里。

答案 1 :(得分:1)

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

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

基本上“name”不是addEntityType调用的有效配置参数。因此,消除您的'name'属性,因为breeze从 shortName namespace 构建它而不需要,您的代码变为:

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

运行得很好。

希望这有帮助。

答案 2 :(得分:0)

使用热毛巾模板进行所有操作......建议直接使用最新的BREEZE代码,而不是使用NUGET更新......如同2013年5月15日

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