我在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)的实体和许多链接的实体。
答案 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。