2013-04-08 58 views
0

我的一個域模型有一個Enum屬性,我喜歡爲其創建一個下拉框,但EFContextProvide元數據功能不會自動導入Enum實體類型以供我訪問,所以我創建了一個我想添加到元數據映射的靜態詞典,充當查找表。如何添加枚舉實體類型,這樣我就可以撥打電話:Breeze JS爲元數據添加一個靜態查找字典

breeze.EntityManager.createEntity(myEnum,...) 

現在,我得到以下錯誤:

Error: Unable to locate an 'Type' by the name: myEnum 

什麼建議嗎?

更新:(我剛添加的Metadata函數調用的enumType信息)

"enumType":{"name":"Plugins","isFlags":"false","underlyingType":"Int32","member":["name":"Custom","value":"0"},{"name":"PluginOfTypeA","value":"1"},{"name":"PluginOfTypeB","value":"2"}]} 

回答

1

謝謝@Jay對你的迴應,我確定了正確的方向。這裏是我可以說關於處理枚舉:

我在服務器上創建了一個查詢列表,我可以單獨調用,以填充下拉列表。我有一個常規數組,我初始化結果的成功承諾,列出此data.results[0].myEnumLookup,然後在Viewmodel上,我訪問該屬性並設置爲ko.observableArray(),以便我可以在View中引用它。確保將select標記的value:屬性設置爲項目的值。

但隨着這樣做的問題,這種方式是,在節省時間,它不讀枚舉值,它是把它當作只是文本,所以它是失敗的,所以

更強大的解決方案:

在我們的應用程序中,由於我們在其他POCO項目中使用這些枚舉域模型,所以我最終創建了一個EF DbSet和適當的表,它將填充我所有的枚舉值和我可以將它們保存到數據庫中,所以現在我們有數據庫中的項目列表,並且爲枚舉創建了單一級別的繼承,所以在我的控制器中,我得到了一個IQueryable將獲得所有這些枚舉的方法,並且在breeze應用程序中,在我的配置文件中,我定義枚舉類型,然後根據配置中的不同類型填充項目列表,以便我可以參考它在我看來,並將其綁定到ko.observableArray()。同樣在我原來的課程中,我不再提及Enum,我將創建MyEnumId以及virtual MyEnum屬性,該屬性將在我的EF5設置中自動執行映射。

雖然在.NET4.5中使用了枚舉,但我學到了EF5 & EF5可以存儲和讀回,但對於SPA前端技術來說它不是很實用,所以我更喜歡使用整數值,並且只管理它之外的枚舉。

0

不能完全確定我理解這個問題。通過「枚舉實體類型」,你的意思是「EntityType」只有固定數量的可能實例嗎?如果是這樣,您可以簡單地將這些實體/實例的整個集合查詢到客戶端,並將它們直接添加到靜態字典中。既然這個集合在概念上是不可變的,你可以在你開始的時候查詢它。此外,你永遠不需要創建任何這些'實體枚舉'的實例,因爲你總是可以從你的字典中提取它們。

但也許我不理解你的問題。

+0

謝謝你的回覆。讓我們忘記詞典,那是因爲我想顯示更有意義的文本。所以我在我的一個域中有一個Enum屬性,我看到在'Metadata'調用中導出了'enumType'。但是當編輯這個項目時,我怎樣才能製作一個可能的枚舉的下拉列表?(我只是用''Metadata'的enumType'信息更新了案例) – aminjam 2013-04-09 20:58:55

+0

你必須自己管理它,但是你肯定有足夠的信息元數據通過entityManager.metadataStore.getEntityType(...)。getProperty(...)來完成。看看一些敲除的例子,說明如何爲一組固定值創建下拉列表。 – 2013-04-09 21:55:23