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支持)。除非枚举只在类中使用(并且不对外公开),否则没有必要在类定义中放置枚举!谢谢你。你在哪里找到这些信息的?我想多读一些关于“限制”或“将来会起作用”的书。。。