2013-05-14 28 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