使用枚举获取Entity Framework迁移错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用枚举获取Entity Framework迁移错误相关的知识,希望对你有一定的参考价值。

我有一个这样的实体和一个枚举:

public class RequestType

    public Guid RequestTypeId  get; set; 
    public RequestActionEnum Name  get; set; 
    public ICollection<Request> Requests  get; set; 

这里是枚举RequestActionEnum

public enum RequestActionEnum

    New,
    Update,
    Archive

我正在使用此代码通过Entity Framework Core进行数据库迁移:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
 
        modelBuilder.Entity<RequestType>().HasData(
            new RequestType  RequestTypeId = Guid.NewGuid(), Name = RequestActionEnum.New ,
            new RequestType  RequestTypeId = Guid.NewGuid(), Name = RequestActionEnum.Update ,
            new RequestType  RequestTypeId = Guid.NewGuid(), Name = RequestActionEnum.Archive 
            );
  

但是在使用Update-Database更新数据库时,出现此错误:

不能自动将列“名称”强制转换为整数类型>

我正在使用Entity Framework Core 3.0和代码优先方法,但不确定为什么会收到此错误。

任何人都可以对这个问题提出任何建议吗?

非常感谢。

我有一个这样的实体和枚举:public class RequestType public Guid RequestTypeId get;组; public RequestActionEnum Name 组; public ICollection ... ...>

答案

这是一个已知的问题,EntityFramework在枚举值中不能很好地发挥作用。我不知道这是否适用于代码优先,但是我已经成功地将列值映射到具有此类的枚举中。在您的实体(POCO)中:

[NotMapped]
public RequestActionEnum Name

     get  return (RequestActionEnum)NameValue; 
     set  NameValue = (int)value; 


[Column("Name")]
public int NameValue  get; set; 
另一答案

我倾向于使用value converter将所有枚举存储为字符串。您是否需要明确指定枚举存储为数字?

以上是关于使用枚举获取Entity Framework迁移错误的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework Code First迁移基本面拾遗

Entity Framework Code First 迁移 Migrations

使用 Entity Framework Core 在运行时迁移

无法使用 Entity Framework 和 Visual Studio 2015 添加迁移

Entity Framework Core 6 迁移包执行错误

使用 Entity Framework Code First 迁移播种大型查找表数据