Breeze JS向元数据添加静态查找字典

时间:2013-04-08 21:35:45

标签: entity-framework breeze

我的一个域模型有一个Enum属性,我想为其创建一个下拉框,但是EFContextProvide元数据函数不会自动导入枚举实体类型供我访问它,所以我创建了一个静态的dictionay我喜欢添加到元数据映射,充当查找表。如何添加Enum实体类型,以便我可以调用:

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

现在,我收到以下错误:

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

有什么建议吗?

更新:(我刚刚添加了enumType函数调用的Metadata信息)

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

2 个答案:

答案 0 :(得分:1)

感谢@Jay的回复,我的方向正确。以下是关于处理Enum的问题:

我在服务器上创建了一个可以单独调用的查找列表,以填充下拉列表。我有一个常规数组,我初始化结果的成功承诺,列出这个data.results[0].myEnumLookup,然后在Viewmodel上,我访问该属性并设置为ko.observableArray()所以我可以参考它我的看法。确保将value:标记的select属性设置为item的值。

但这样做的问题是,在保存时,它没有读取Enum值,而是将其视为文本,因此它失败了,所以

更强大的解决方案:

在我们的应用程序中,我们碰巧真正受益于Enum及其预编译值,因为我们在其他POCO项目中使用这些Enum Domain模型,因此我结束了创建EF DbSet和正确的表格将填充所有我的Enums值,我可以将它们保存到数据库中,所以现在我们有DB中的项目列表,我为Enums创建了一个单独的继承级别,所以在我的控制器中,我得到了一个{{ 1}}方法将获取所有这些枚举,并在breeze应用程序中,在我的配置文件中,我定义枚举的类型,然后我将根据我的配置中的不同类型填充项目列表,所以我可以参考在我看来并将其绑定到IQueryable。同样在我的原始课程中,我不再引用Enum,我将创建ko.observableArray()以及MyEnumId属性,该属性将在我的EF5设置中自动进行映射。

我学到的课程,即使是.NET4.5中的Enum& EF5可以存储和回读,但在SPA前端技术方面它并不实用,所以我更喜欢使用整数值,只需管理它之外的枚举。

答案 1 :(得分:0)

我不完全确定我理解这个问题。 “Enum实体类型”是指只有固定数量的可能实例的“EntityType”吗?如果是这样,您可以简单地将这些实体/实例的整个集合查询到客户端,并将它们直接添加到静态字典中。由于该集合在概念上是不可变的,因此您可以在会话开始时对其进行查询。此外,您永远不需要创建任何这些“实体枚举”的实例,因为您始终可以从字典中提取它们。

但也许我不理解你的问题。