EF7支持枚举吗?

pan*_*apa 6 entity-framework entity-framework-core

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

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

谢谢

编辑:

枚举:

  public enum LimitMode 
    {
        Max,
        Min,
        MaxAndMin,
    }
Run Code Online (Sandbox Code Playgroud)

模型:

  public class SomeModel 
    {
    (..)
    public LimitMode LimitMode {get; set;}
    }
Run Code Online (Sandbox Code Playgroud)

SomeModel的ModelBuilder:

        modelBuilder.Entity<SomeModel>(entity => {
            (...)
            entity.Property(p => p.LimitMode);
        })
Run Code Online (Sandbox Code Playgroud)

sch*_*tty 6

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
}
Run Code Online (Sandbox Code Playgroud)

使用默认转换器,如下所示:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Rider>()
        .Property(e => e.Mount)
        .HasConversion<string>();
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢在模型类上使用属性,如下所示:

public class Rider
{
    public int Id { get; set; }

    [Column(TypeName = "nvarchar(24)")]
    public EquineBeast Mount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


Ser*_*kiy 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
}
Run Code Online (Sandbox Code Playgroud)