.net Enum支持实体框架数据库优先

.net Enum支持实体框架数据库优先,.net,entity-framework,enums,.net-4.5,edmx,.net,Entity Framework,Enums,.net 4.5,Edmx,我可以找到一系列教程,介绍如何对model first和code first实现枚举支持,如下所示: 有人能给我解释一下或者提供一些关于如何正确实现数据库优先应用程序的enum支持的说明吗。我想我必须从edmx设计器开始,右键单击表中的一列,然后转换为enum?谢谢你的建议。我使用的是.NET 4.5和Enity Framework 5.0,以下是我的猜测: 从数据库生成.edmx文件后,您可以按照以下链接中的指南进行操作:我最后要做的是将数据库中的列类型更改为int,然后进入edmx并从数

我可以找到一系列教程,介绍如何对model first和code first实现枚举支持,如下所示:

有人能给我解释一下或者提供一些关于如何正确实现数据库优先应用程序的enum支持的说明吗。我想我必须从edmx设计器开始,右键单击表中的一列,然后转换为enum?谢谢你的建议。我使用的是.NET 4.5和Enity Framework 5.0,以下是我的猜测:
从数据库生成.edmx文件后,您可以按照以下链接中的指南进行操作:

我最后要做的是将数据库中的列类型更改为int,然后进入edmx并从数据库更新模型,然后我添加了一个枚举类型,然后将edmx设计器中的列类型更改为该枚举的类型。重新更新poco,一切正常

你可能也应该阅读

枚举类型不是通过数据库优先操作在模型中创建的
  • 从现有数据库创建EDM时,不会在模型中定义枚举。
  • “从数据库更新模型”将保留对枚举类型的声明,但同样不会从数据库中检测枚举构造。


我见过使用T4,但在我的具体案例中,它只是给我的项目增加了不必要的复杂性。所以我会先给出枚举代码。

顺便说一句,你可以先对现有数据库使用代码。想法是在数据库中使用基于数字的表示,如
short
,并使用隐式数字创建你的
enum
,例如
公共枚举性别:short{NotSet=0,男性=1,女性=2}
并将属性
[EnumDataType(typeof(short))]
添加到实体的字段中。我同意不必要的复杂性。我的模型中有很多枚举,每当删除/读取表时重新配置类型非常烦人,尤其是当枚举类型是外部的时候。我也在“屈服”并首先使用enums代码。也许将来我们会有更好的数据库优先枚举支持。从数据库更新模型并不总是保留枚举。幸运的是,您的编译器应该能够捕捉到设计器何时用int替换enum声明。是的,这是一个“when”,而不是一个“if”。我也有类似的情况,如果您能提供更多关于如何解决此问题的详细信息,我将不胜感激。我在数据库中有一个存储“类型”的表。它有两列:ID和TypeName。假设您的案例中有一个类似的表,那么您在数据库中到底更改了什么?然后,当您说您向edmx添加了枚举类型时,如何在数据库发生更改时使其与数据库保持最新?是的,当时可能有所不同,但当我尝试此操作时,会出现属性可用类型的下拉列表,而我的枚举不是其中之一(我自己的类型都不是)