Entity framework EF7(EFCore)支持枚举吗?

Entity framework EF7(EFCore)支持枚举吗?,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,我对EF7RC1(EFCore)有问题。我无法在模型中使用枚举。我可以保存枚举属性。该值被强制转换为int。我的问题是,在数据读取期间,我得到无效的强制转换异常 EF7是否支持枚举属性 如何使用fluent api配置它 谢谢 编辑: 枚举: 型号: public class SomeModel { (..) public LimitMode LimitMode {get; set;} } SomeModel的ModelBuilder: m

我对EF7RC1(EFCore)有问题。我无法在模型中使用枚举。我可以保存枚举属性。该值被强制转换为int。我的问题是,在数据读取期间,我得到无效的强制转换异常

  • EF7是否支持枚举属性
  • 如何使用fluent api配置它
  • 谢谢

    编辑:

    枚举:

    型号:

      public class SomeModel 
        {
        (..)
        public LimitMode LimitMode {get; set;}
        }
    
    SomeModel的ModelBuilder:

            modelBuilder.Entity<SomeModel>(entity => {
                (...)
                entity.Property(p => p.LimitMode);
            })
    
    modelBuilder.Entity(Entity=>{
    (...)
    属性(p=>p.LimitMode);
    })
    
    这对我很有效。我正在project.json中使用“EntityFramework.MicrosoftSqlServer”:“7.0.0-rc1-final”。作为推动模型的一部分,我必须运行ef migrations数据库更新

    public class Person
    {
        public int PersonId { get; set; }
        public string LastName { get; set; }
        public string FirstName { get; set; }
        public int PersonTypeId { get; set; }
        public PersonType PersonType { get; set; }
        public ActiveType ActiveType { get; set; }
    }
    
    public enum ActiveType
    {
        Active = 0,
        Inactive = 1
    }
    

    EntityFrameworkCore 2.1现在支持值转换器 这允许您在数据库中将枚举视为字符串,并使它们正确地转换为模型中的枚举

    您可以使用值转换器来实现这一点。您可以创建自己的,但EF Core 2.1附带了一些现成的预定义值转换器。其中之一是EnumToString值转换器

    鉴于以下情况:

    public class Rider
    {
        public int Id { get; set; }
        public EquineBeast Mount { get; set; }
    }
    
    public enum EquineBeast
    {
        Donkey,
        Mule,
        Horse,
        Unicorn
    }
    
    使用默认转换器,如下所示:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder
            .Entity<Rider>()
            .Property(e => e.Mount)
            .HasConversion<string>();
    }
    
    public class Rider
    {
        public int Id { get; set; }
    
        [Column(TypeName = "nvarchar(24)")]
        public EquineBeast Mount { get; set; }
    }
    

    尝试明确地说枚举是int
    public enum LimitMode:int
    ,并给枚举成员一个值(
    Max=0,
    ),我已经尝试过了。不幸的是,它不起作用。仍然得到无效的强制转换异常:/奇怪,在EF6中它工作得很好。EF7尚未完全发布,因此它可能仍然是一个bug,或者您的数据库中的值未连接到任何枚举。如果您的枚举值为1-3,并且数据库中存储了4个,那么我想您可能会遇到该错误。使用枚举迁移后,架构是什么样子的?我问这个问题是因为现在MySQL在任何情况下都无法进行迁移,所以我需要手动创建模式。它将被设置为int column。不要在不同的问题下给出相同的答案。若你们认为这个问题和重复的问题是一样的。2.3.好的,很抱歉。我已经将另外两个标记为这一个的副本,因为这是最古老的。
    public class Rider
    {
        public int Id { get; set; }
    
        [Column(TypeName = "nvarchar(24)")]
        public EquineBeast Mount { get; set; }
    }