我想创建一个名为' type'的枚举类型列。但是当我对Code First生成的数据库进行反向工程时,它会将其指定为' int'。
这是我的Enum课程:
[Flags]
public enum TypeNames
{
Een = 0,
Twee = 1,
Drie = 2
}
这是我的Grounds课程,用于创建带有' TypeNames' -enum的表格。 Properties类是另一个表(Grounds - Properties具有TPT继承)。
[Table("gronden")]
public partial class Grounds : Properties
{
[Column("opp")]
public double? Surface { get; set; }
[EnumDataType(typeof(TypeNames)), Column("type")]
public TypeNames Types { get; set; }
}
我在这里缺少什么想法,以便在我的数据库中输入枚举类型?
答案 0 :(得分:0)
根据以下答案,看来EnumDataTypeAttribute只为ASP.NET UI组件实现,而不是为EF使用。 Should the EnumDataTypeAttribute work correctly in .NET 4.0 using Entity Framework?
EF Core 2.1实现了一项新功能,该功能允许将Enums作为字符串存储在数据库中。这允许数据进行自我描述,这对于长期可维护性确实很有帮助。对于您的特定情况,您可以执行以下操作:
[Table("gronden")]
public partial class Grounds : Properties
{
[Column("opp")]
public double? Surface { get; set; }
[Column("type", TypeName = "nvarchar(24)")]
public TypeNames Types { get; set; }
}
您可以在此页面上找到更多详细信息: https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions
此外,我注意到您在枚举上设置了FlagsAttribute。您是否希望能够将多个枚举值应用于单个实体?当值以int形式持久化时,这应该可以正常工作,但如果以MySQL ENUM或字符串数据类型存储,则将无法工作。 MySQL确实支持SET数据类型,但是EF似乎不太可能添加对此功能的支持,因为大多数其他数据库没有类似的概念。 https://dev.mysql.com/doc/refman/5.6/en/constraint-enum.html
如果您确实确实希望允许将多个枚举值应用于每个实体(类似于Stack Overflow上使用标签的方式),则可以考虑创建多对多关系。基本上,这意味着将TypeNames枚举转换为数据库中的Types表,并允许EF生成GroundTypes表以将它们链接在一起。这是一个教程: http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx