Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 代码首先创建int而不是enum_Entity Framework_Enums_Ef Code First - Fatal编程技术网

Entity framework 代码首先创建int而不是enum

Entity framework 代码首先创建int而不是enum,entity-framework,enums,ef-code-first,Entity Framework,Enums,Ef Code First,我想创建一个名为“type”的枚举类型列,但当我对代码第一次生成的DB进行反向工程时,它会将其指定为“int” 这是我的枚举类: [Flags] public enum TypeNames { Een = 0, Twee = 1, Drie = 2 } 下面是我的Grounds类,用于创建带有“TypeNames”-enum的表。Properties类是另一个表(Grounds-Properties具有TPT继承) 是否知道我在这里缺少什么来将枚举类型引入数据库?根据

我想创建一个名为“type”的枚举类型列,但当我对代码第一次生成的DB进行反向工程时,它会将其指定为“int”

这是我的枚举类:

[Flags]
public enum TypeNames
{
    Een = 0,
    Twee = 1,
    Drie = 2
}
下面是我的Grounds类,用于创建带有“TypeNames”-enum的表。Properties类是另一个表(Grounds-Properties具有TPT继承)


是否知道我在这里缺少什么来将枚举类型引入数据库?

根据下面的回答,EnumDataTypeAttribute似乎只针对ASP.NET UI组件实现,而不针对EF使用。

EF Core 2.1实现了一个新功能,允许枚举作为字符串存储在数据库中。这使得数据可以自我描述,这对长期的可维护性非常有帮助。对于您的具体情况,您可以简单地执行以下操作:

[Table("gronden")]
public partial class Grounds : Properties
{
    [Column("opp")]
    public double? Surface { get; set; }
    [Column("type", TypeName = "nvarchar(24)")]
    public TypeNames Types { get; set; }
}
您可以在此页面上找到更多详细信息:

另外,我注意到您在枚举上设置了FlagsAttribute。您是否希望能够将多个枚举值应用于单个实体?当值被持久化为int时,这应该可以正常工作,但如果存储为MySQL枚举或字符串数据类型,则不起作用。MySQL确实支持SET数据类型,但EF似乎不太可能添加对该功能的支持,因为大多数其他数据库都没有类似的概念。

如果您确实希望允许多个枚举值应用于每个实体(类似于堆栈溢出中使用标记的方式),则可以考虑创建多对多关系。基本上,这意味着将TypeNames枚举转换为数据库中的Types表,并允许EF生成一个GroundTypes表将它们链接在一起。以下是一个教程:


那么,在SQL中,
enum
看起来像什么?@HenkHolterman
INT(11)
提示MySQL,在这种情况下,它看起来像。@HenkHolterman我想返回字符串文本值,而不是数据库中的索引值。但我不知道如何首先在代码中进行管理。EF Core有一个起点,允许将列创建为类型ENUM,但当它们作为字符串返回到客户端时,需要更多的EF Core配置,以便在运行时在枚举常量和字符串之间进行转换。我不认为EF(非核心)提供了足够的扩展点来支持该解决方案的移植,我得到的印象是它根本不可能实现。
[Table("gronden")]
public partial class Grounds : Properties
{
    [Column("opp")]
    public double? Surface { get; set; }
    [Column("type", TypeName = "nvarchar(24)")]
    public TypeNames Types { get; set; }
}