EF7(EFCore)是否支持枚举?

时间:2016-02-09 17:54:01

标签: entity-framework entity-framework-core

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

  1. EF7是否支持枚举属性?
  2. 如何使用流畅的api配置它?
  3. 由于

    编辑:

    枚举:

      public enum LimitMode 
        {
            Max,
            Min,
            MaxAndMin,
        }
    

    型号:

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

    SomeModel的ModelBuilder:

            modelBuilder.Entity<SomeModel>(entity => {
                (...)
                entity.Property(p => p.LimitMode);
            })
    

2 个答案:

答案 0 :(得分:1)

这对我有用。我在project.json中使用“EntityFramework.MicrosoftSqlServer”:“7.0.0-rc1-final”。作为推送模型的一部分,我必须运行ef迁移数据库更新。

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
}

答案 1 :(得分:1)

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

使用值转换器执行此操作。您可以创建自己的,但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; }
}