C# 实体框架核心3.1枚举转换在转换nvarchar值时失败';枚举值';到数据类型int
我正在使用Entity Framework Core 3.1,并试图在我的localdb中对我的实体中的枚举属性进行简单查询,但我一直遇到以下错误: 将nvarchar值“accounter”转换为数据类型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
公共类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