Skip to main content
 首页 » 编程设计

entity-framework-4.1之使用 EF 代码优先的枚举之播种数据库然后使用的标准方法

2024年01月01日18findumars

是否有在 EF 代码优先中使用枚举的标准方法?似乎有一些使用枚举包装类的示例。

但是,我希望能够定义枚举并使用数据库初始值设定项将枚举值也植入到数据库中。如果我必须从枚举中手动为数据库表设置种子,那么定义枚举和创建包装器似乎没有多大意义。

请您参考如下方法:

不幸的是,enums 在 EF 4.1 上不受原生支持。这是一篇关于如何处理它们的著名文章:Faking enums on EF 4 .但是,它确实需要一个包装器。

然而,在 EF 4 中有一种更简单的映射枚举的方法:只需在您的类上创建一个 int 属性来表示枚举的 int 值。这是 EF 应该映射的属性,然后有一个“迷你包装器”属性以允许您使用枚举。

public class Appointment  
{    
    public int ID { get; set; } 
    public string Description { get; set; } 
 
    // This property will be mapped 
    public int DayOfWeekValue { get; set; } 
 
    public DayOfWeek Day 
    { 
        get { return (DayOfWeek) DayOfWeekValue; } 
        set { DayOfWeekValue = (int) value; } 
    } 
} 
 
public enum DayOfWeek 
{ 
    Monday, 
    Tuesday, 
    Wednesday, 
    Thursday, 
    Friday, 
    Saturday, 
    Sunday 
} 

在生成数据库时,EF 会愉快地忽略它不知道如何映射的任何类型,但会映射 int 属性。

注意:这直接取 self 对另一个enum 和EF 问题的回答:EF 4.1 Code First - map enum wrapper as complex type