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

问题描述 投票:0回答:2

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

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 ... ...>

c# .net entity-framework entity-framework-core ef-migrations
2个回答
1
投票

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

[NotMapped]
public RequestActionEnum Name
{
     get { return (RequestActionEnum)NameValue; }
     set { NameValue = (int)value; }
}

[Column("Name")]
public int NameValue { get; set; }

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.