我遇到EF7 RC1(EFCore)的问题。我无法在模型中使用枚举。我可以保存枚举属性。该值将转换为int。我的问题是在数据读取期间我得到了无效的强制转换异常。
由于
编辑:
枚举:
public enum LimitMode
{
Max,
Min,
MaxAndMin,
}
型号:
public class SomeModel
{
(..)
public LimitMode LimitMode {get; set;}
}
SomeModel的ModelBuilder:
modelBuilder.Entity<SomeModel>(entity => {
(...)
entity.Property(p => p.LimitMode);
})
答案 0 :(得分: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
}
答案 1 :(得分:1)
EntityFrameworkCore 2.1现在支持值转换器 这允许您将Enums视为数据库中的字符串,并将它们正确转换为模型中的Enums。
使用值转换器执行此操作。您可以创建自己的,但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; }
}