C# 实体框架核心3.1枚举转换在转换nvarchar值时失败';枚举值';到数据类型int

C# 实体框架核心3.1枚举转换在转换nvarchar值时失败';枚举值';到数据类型int,c#,enums,entity-framework-core,entity-framework-core-3.1,C#,Enums,Entity Framework Core,Entity Framework Core 3.1,我正在使用Entity Framework Core 3.1,并试图在我的localdb中对我的实体中的枚举属性进行简单查询,但我一直遇到以下错误: 将nvarchar值“accounter”转换为数据类型int时,枚举转换失败 实体: 公共类DemoEntity { [关键] 公共int Id{get;set;} 公共字符串名{get;set;} 公共字符串LastName{get;set;} 公共位置位置{get;set;} } 枚举-位置: 公共枚举位置 { [显示(Name=“acco

我正在使用Entity Framework Core 3.1,并试图在我的localdb中对我的实体中的枚举属性进行简单查询,但我一直遇到以下错误:

将nvarchar值“accounter”转换为数据类型int时,枚举转换失败

实体:

公共类DemoEntity
{
[关键]
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共位置位置{get;set;}
}
枚举-位置:

公共枚举位置
{
[显示(Name=“accountary”)]
会计,
[显示(Name=“首席执行官(CEO)”)]
首席执行官,
[显示(Name=“集成专家”)]
集成专家,
[显示(Name=“初级技术作者”)]
青年技术作家,
[显示(Name=“售前支持”)]
长者支援,
[显示(Name=“销售助理”)]
销售助理,
[显示(Name=“高级Javascript开发人员”)]
高级JavaScriptDeveloper,
[显示(Name=“软件工程师”)]
软件工程师
}
DbContext:

public class DemoDbContext : DbContext
{
    public DemoDbContext(DbContextOptions options)
        : base(options) { }

    public DbSet<DemoEntity> Demos { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //var converter = new ValueConverter<Position, string>(
        //                    v => v.ToString(),
        //                    v => (Position)Enum.Parse(typeof(Position), v));

        //var converter = new EnumToStringConverter<Position>();

        modelBuilder
            .Entity<DemoEntity>()
            .Property(e => e.Position);
            //.HasColumnType("nvarchar(max)")
            //.HasConversion<string>();
            //.HasConversion(converter);
    }
}
在我的数据库中,
位置的类型为
NVARCHAR(MAX)


我错过了什么简单的东西吗?不知道我错在哪里。请帮忙

由于基础数据库列类型是字符串,关联值转换器是正确的映射(默认情况下,EF Core将
enum
s映射到
int

所以像这样的事情是必须的

modelBuilder.Entity<DemoEntity>()
    .Property(e => e.Position)
    .HasConversion<string>();
被错误地翻译为

WHERE [d].[Position] = 0
而非预期

WHERE [d].[Position] = N'Accountant'
解决方案是使用比较运算符(
=
!=
)而不是
等于

x.Position == Position.Accountant
翻译正确


通常,当存在相应的C#运算符时,避免使用
等于
(和
比较
比较
等)方法

.HasConversion()
是正确的映射。什么“不起作用”?我尝试添加
.hascoveration()
。当执行查询时,我得到了相同的错误。我将查询修改为
query.Where(x=>x.Position.Equals(Position.accountary.ToString()).toListSync()
。现在执行查询,但我得到的结果为零。有什么想法吗?谢谢,我能复制出来。还有一个EFC错误。
x.Position == Position.Accountant