枚举出现 Entity Framework 迁移错误
Getting Entity Framework migration error with enum
我有一个像这样的实体和枚举:
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
更新数据库时,出现此错误:
Column "Name" cannot be cast automatically to type integer
我正在使用 Entity Framework Core 3.0 和代码优先方法,我不确定为什么会收到此错误。
任何人都可以就此问题提出任何想法吗?
非常感谢。
EntityFramework 不能很好地处理枚举值是一个已知问题。我不知道这是否适用于代码优先,但我已经成功地将列值映射到类似这样的枚举。在您的实体 (POCO) 中:
[NotMapped]
public RequestActionEnum Name
{
get { return (RequestActionEnum)NameValue; }
set { NameValue = (int)value; }
}
[Column("Name")]
public int NameValue { get; set; }
这不是最优雅的解决方案,但它可能会奏效。
我倾向于使用 value converter 将所有枚举存储为字符串。您是否需要明确指定您的枚举存储为数字?
我有一个像这样的实体和枚举:
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
更新数据库时,出现此错误:
Column "Name" cannot be cast automatically to type integer
我正在使用 Entity Framework Core 3.0 和代码优先方法,我不确定为什么会收到此错误。
任何人都可以就此问题提出任何想法吗?
非常感谢。
EntityFramework 不能很好地处理枚举值是一个已知问题。我不知道这是否适用于代码优先,但我已经成功地将列值映射到类似这样的枚举。在您的实体 (POCO) 中:
[NotMapped]
public RequestActionEnum Name
{
get { return (RequestActionEnum)NameValue; }
set { NameValue = (int)value; }
}
[Column("Name")]
public int NameValue { get; set; }
这不是最优雅的解决方案,但它可能会奏效。
我倾向于使用 value converter 将所有枚举存储为字符串。您是否需要明确指定您的枚举存储为数字?