1

我有这两个实体:

在此处输入图像描述

颜色实体映射到表示颜色的常量值表。
Code=1, Name="Red"
Code=2, Name="Blue"
以此类推...

在 Car 实体中,Color 属性是 int 类型,并且对 Color 实体中的 Code 属性具有外键约束。我想将 Car 中的 Color 属性转换为 Enum,但 Enum 应该从 Color 表中获取它的值。

枚举可以在每个构建操作或设计器中的“更新模型”操作中更新。能不能实现这个功能?

4

2 回答 2

1

“但枚举应该从颜色表中获取它的值。”

那么你所拥有的有什么问题吗?无论如何,既然你问了......一个枚举是在程序集中的定义。因此,一旦将新颜色添加到表中,您就会拥有一个过时的枚举。但是,如果您可以在构建时保持最新状态。有一个不错的选择。

显然,使用 T4 的建议很有趣。但是 t4 需要连接到 DB 并读取它。当 T4 超越源代码生成时,使用简单的应用程序会更容易。当然,除非你已经擅长 t4。因此,如果 t4 对于此任务有点困难,请尝试:

一个简单的辅助应用程序,它读取数据库并更新 EnumColor.cs将是合理的。

IE 一个简单的控制台应用程序。放置作为预构建步骤。预构建读取数据库,重写 enum.cs 文件,然后进行编译/构建。

在此处输入图像描述

**简单的选择:使用可以在运行时扩展的字典**

Dictionary<int,string> colors
于 2013-05-24T01:18:51.367 回答
0

对我来说,第一个问题是为什么?我有类似的技术需求,但业务需求是帮助报告。枚举可以很好地使代码更易于阅读和维护,但是您是否必须在 SSRS 中创建一个报告,然后您就无法访问枚举(好吧,我相信一些高级 SSRS 用户会说您可以在程序集中进行链接等, 但这不是重点)。我们使用了一个预构建脚本(也可以运行构建后)来生成内联缩放器函数脚本以针对 db 执行。这样,您可以执行 select 语句,例如:

SELECT Model, fColorNameEnum(Color) FROM Car

这样,如果您在枚举中添加新元素,您就不必再次触摸您的报告。我倾向于在业务逻辑的实现中使用枚举,通常是项目状态或工作流状态。因此,添加新选项需要添加新逻辑,这意味着在代码中进行。如果您永远不会对代码中的颜色值进行推理,那么要将其放入枚举而不是另一个链接对象的原因是什么?

于 2013-09-06T02:46:16.300 回答