Entity framework EF7(EFCore)支持枚举吗?
我对EF7RC1(EFCore)有问题。我无法在模型中使用枚举。我可以保存枚举属性。该值被强制转换为int。我的问题是,在数据读取期间,我得到无效的强制转换异常Entity framework EF7(EFCore)支持枚举吗?,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,我对EF7RC1(EFCore)有问题。我无法在模型中使用枚举。我可以保存枚举属性。该值被强制转换为int。我的问题是,在数据读取期间,我得到无效的强制转换异常 EF7是否支持枚举属性 如何使用fluent api配置它 谢谢 编辑: 枚举: 型号: public class SomeModel { (..) public LimitMode LimitMode {get; set;} } SomeModel的ModelBuilder: m
public class SomeModel
{
(..)
public LimitMode LimitMode {get; set;}
}
SomeModel的ModelBuilder:
modelBuilder.Entity<SomeModel>(entity => {
(...)
entity.Property(p => p.LimitMode);
})
modelBuilder.Entity(Entity=>{
(...)
属性(p=>p.LimitMode);
})
这对我很有效。我正在project.json中使用“EntityFramework.MicrosoftSqlServer”:“7.0.0-rc1-final”。作为推动模型的一部分,我必须运行ef migrations数据库更新
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
}
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
}
使用默认转换器,如下所示:
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; }
}
尝试明确地说枚举是int
public enum LimitMode:int
,并给枚举成员一个值(Max=0,
),我已经尝试过了。不幸的是,它不起作用。仍然得到无效的强制转换异常:/奇怪,在EF6中它工作得很好。EF7尚未完全发布,因此它可能仍然是一个bug,或者您的数据库中的值未连接到任何枚举。如果您的枚举值为1-3,并且数据库中存储了4个,那么我想您可能会遇到该错误。使用枚举迁移后,架构是什么样子的?我问这个问题是因为现在MySQL在任何情况下都无法进行迁移,所以我需要手动创建模式。它将被设置为int column。不要在不同的问题下给出相同的答案。若你们认为这个问题和重复的问题是一样的。2.3.好的,很抱歉。我已经将另外两个标记为这一个的副本,因为这是最古老的。
public class Rider
{
public int Id { get; set; }
[Column(TypeName = "nvarchar(24)")]
public EquineBeast Mount { get; set; }
}