0

我的一个域模型有一个枚举属性,我喜欢为其创建一个下拉框,但是 EFContextProvide 元数据函数不会自动导入枚举实体类型供我访问它,所以我创建了一个我喜欢的静态字典添加到元数据映射,充当查找表。如何添加 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"}]}
4

2 回答 2

1

感谢@Jay 的回复,我的方向是正确的。以下是我可以说的关于处理 Enum 的内容:

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

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

更强大的解决方案:

在我们的应用程序中,我们碰巧真正受益于 Enum 及其预编译值,因为我们在其他 POCO 项目中使用这些 Enum Domain 模型,所以我结束了创建一个 EFDbSet和适当的表,该表将填充我的所有Enum值,我可以将它们保存到数据库中,所以现在我们有了数据库中的项目列表,并且我为枚举创建了单级继承,所以在我的控制器中,我得到了一个IQueryable可以获取所有这些枚举的方法,并且在微风应用程序中,在我的配置文件中,我定义了枚举的类型,然后我将根据我的配置中的不同类型填充项目列表,因此我可以在我的视图中引用它并将其绑定到ko.observableArray(). 同样在我原来的课程中,我不再提到枚举,我将创建MyEnumId以及virtual MyEnum将在我的 EF5 设置中自动执行映射的属性。

吸取的教训,虽然 .NET4.5 和 EF5 中的 Enum 可以存储和回读,但在 SPA 前端技术方面不太实用,所以我更喜欢整数值,只管理枚举在它之外。

于 2013-04-11T20:39:29.537 回答
0

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

但也许我不明白你的问题。

于 2013-04-09T20:20:58.653 回答