【问题标题】:Enum Support for Entity Framework Database First对实体框架数据库的枚举支持优先
【发布时间】:2013-07-17 21:09:09
【问题描述】:

我可以找到一堆关于如何实现对模型优先和代码优先的枚举支持的教程,如下所示:

http://msdn.microsoft.com/en-us/data/jj248772.aspx

http://msdn.microsoft.com/en-us/data/hh859576.aspx

谁能向我解释或提供一些关于如何正确实现对数据库优先应用程序的枚举支持的说明。我想我必须从 edmx 设计器开始,然后右键单击表格中的一列并转换为枚举?感谢您的任何建议。我正在使用 .NET 4.5 和 Enity Framework 5.0

【问题讨论】:

  • 顺便说一句,您可以先对现有 Db 使用代码msdn.microsoft.com/en-us/data/jj200620
  • 这个想法是在数据库中使用基于数字的表示形式,例如 short,并使用隐式数字创建您的 enum,例如public enum Gender : short { NotSet = 0, MALE = 1, FEMALE = 2 } 并将属性 [EnumDataType(typeof(short))] 添加到实体的字段中。

标签: .net entity-framework enums .net-4.5 edmx


【解决方案1】:

您也应该阅读this

枚举类型不是通过数据库优先操作在您的模型中创建的

  • 从现有数据库创建 EDM 时,未在模型中定义枚举。
  • 从数据库更新模型将保留您对 Enum 类型的声明,但同样不会从您的数据库中检测到 Enum 构造。

我见过a couple of solutions 使用 T4,但在我的具体情况下,它只是给我的项目增加了不必要的复杂性。所以我会放弃,所以枚举代码优先。

【讨论】:

  • 我同意不必要的复杂性。我的模型中有很多枚举,每当表被删除/读取时重新配置类型真的很烦人,尤其是当你的枚举类型是外部的时。我也“让步”并优先使用枚举代码。也许在未来我们会有更好的数据库优先枚举支持。
  • 从数据库更新模型并不总是保留枚举。幸运的是,当设计器用 int 替换 enum 声明时,您的编译器应该会捕捉到。是的,这是一个“当”,而不是“如果”。
【解决方案2】:

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

【讨论】:

  • 我处于类似情况,非常感谢您如何解决此问题的更多详细信息。我在数据库中有一个存储“类型”的表。它有两列:ID 和 TypeName。假设你有一个类似的表,你在数据库中到底做了什么改变?那么当你说你在 edmx 中添加了一个 enum 类型时,当数据库发生变化时,你如何使该类型与数据库保持同步呢?
  • 是的,也许当时情况不同,但是当我尝试这个时,有一个属性可用类型的下拉列表,我的枚举不是其中之一(我自己的类型都不是)
【解决方案3】:

这是我的疯狂猜测: 从数据库生成 .edmx 文件后,您可以按照以下链接中的指南进行操作:http://msdn.microsoft.com/en-us/data/jj248772.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2014-03-06
    相关资源
    最近更新 更多