C# 在';枚举';上课?(EF 5)

C# 在';枚举';上课?(EF 5),c#,asp.net,.net,entity-framework,ef-code-first,C#,Asp.net,.net,Entity Framework,Ef Code First,我正在尝试做一些非常简单的事情。我想在代码优先解决方案中使用Enum作为列类型。我使用的是EntityFramework5.0稳定版 考虑我的Enums包装类和模型: public class Enums { public enum UserType { Bronze = 0, Silver = 1, Gold = 2, Admin = 4 } } public class User { publi

我正在尝试做一些非常简单的事情。我想在代码优先解决方案中使用
Enum
作为列类型。我使用的是EntityFramework5.0稳定版

考虑我的
Enum
s包装类和模型:

public class Enums
{
    public enum UserType
    {
        Bronze = 0,
        Silver = 1,
        Gold = 2,
        Admin = 4
    }
}

public class User
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public Enums.UserType UserType { get; set; }
}
如果生成数据库,则不会生成列
UserType
。当我删除
Enum
周围的“
class
wrapper”时,如下所示:

public enum UserType
{
    Bronze = 0,
    Silver = 1,
    Gold = 2,
    Admin = 4
}
public class User
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public UserType UserType { get; set; }
}
确实生成了!我的第一次设置是如此罕见还是“请不要”的方法


我希望听到一些标准化的建议或最佳实践和/或解释为什么我的第一个设置不起作用。

EF不支持嵌套类型(无论是枚举、复杂类型还是实体)

我以前从未见过有人在
Enum
周围使用包装器类。当然,这可能是因为我没有足够的时间四处走动我见过catch在一个名称空间中包含大量
enum
定义的所有文件,但从来没有一个包装器类。我看不到包装器类添加了任何内容


正如@Pawel所说,EF不支持嵌套类型。这有点道理:如果你实例化的是内部类型而不是外部类型,那么外部类型有什么意义呢

您可以将枚举放在名称空间而不是类中。是的,嗯。。。我考虑了两种选择。现在我有理由选择名称空间。我认为将其包装在类中的好处是,名称空间更小,
enum
本身以“Enums”作为前缀。您可以始终向名称空间添加额外的段:
namespace 321X.Enums
,而不仅仅是
namespace 321X
。Ann如是说。您真正需要的是一个嵌套的名称空间(EF支持)。除非枚举只在类中使用(并且不对外公开),否则没有必要在类定义中放置枚举!谢谢你。你在哪里找到这些信息的?我想多读一些关于“限制”或“将来会起作用”的书。。。