2013-05-14 46 views
1

我正在使用带EF的breezejs。我的Web API正在返回一个“对象”,该对象由来自多个链接实体的属性组成,这些链接实体用于绑定到网格。稍后我需要更新一些属性,并且我想缓存数据,因此很轻松。我正在使用noDB示例创建一个自定义实体。EF使用Breeze时的错误

第一个问题是微风似乎期望名称属性在addEntityType方法中传递,或者它引发错误'structuralTypeName'参数必须是'字符串'。

第二个问题是调用结构类型._fixup在微风行4742似乎是抛出以下错误对象#有没有方法'_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)的实体和一些链接的实体。

回答

1

在我的机器,微风引发错误与您的呼叫此消息addEntityType:

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

基本上“名称”不是一个有效的配置参数来调用addEntityType。因此,消除你的“名称”属性,它不是必要的,因为微风建立起来了SHORTNAME命名空间,你的代码就变成了:

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

它运行得很好。

希望这会有所帮助。

+1

DANG!我刚刚证实了我自己:-)你太快了,Jay – Ward 2013-05-14 17:14:04

+0

谢谢你的回复。正如我在查询中提到的,如果我不使用“name”参数并仅使用“shortName”参数,则breeze将引发以下错误 - 'structuralTypeName'参数必须是'string'。它命中4724行。 structuralType似乎是被传递的对象。正如你所看到的,它正在寻找一个不存在的名称属性。 (this.getEntityType(structuralType.name,true)){ var xxx = 7; } – shai 2013-05-15 01:56:11

+1

我认为你没有运行最新版本的Breeze,或者没有刷新缓存。我们运行了您在Breeze v 1.3.3上没有问题的确切代码。 – 2013-05-15 06:08:56

0

所有那些使用热毛巾模板...则建议抓住最新BREEZE代码直接并且不使用的NuGet更新中...作为15/05/2013

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

+1

我不完全明白。 HotTowel模板和nuget软件包确实引用了旧版本的BreezeJS,它可能具有现在不存在的structuralType.name属性(客户端元数据定义在当时处于测试阶段,我们称API受限于更改)。 – Ward 2013-05-15 17:49:07

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)升级到最新版本的建议。

感谢您与我们在一起。

+0

@ ward-我使用了热毛巾模板,并通过nuget升级到了最新的breeze软件包,然后遇到了这个问题。然后我从git集线器下载了最新的源代码,微风的代码库也不同。因此,我建议您从各个来源获取最新的源代码。我没有说过,微风或热毛巾模板不应该使用。相反,我是两个坚定的支持者,并强烈推荐他们。 – shai 2013-05-15 23:08:28

+0

很高兴听到你对HT的热情不减。我真的很惊讶你发现GitHub和当前v.1.3.3 NuGet * w/r/t'addEntityType * *之间的区别,因为我没有看到它。我只是将Jay的例子(用'shortName'代替'name')粘贴到一个纯粹的1.3.3项目中,并没有发生异常。我希望看到一个例子,解释为什么你认为人们应该从GitHub取而不是使用v 1.3.3 NuGet pkg。情况并非如此。如果是这样,我们需要解决它pronto。 – Ward 2013-05-16 05:45:02