将nvarchar值“ EnumValue”转换为数据类型int时,Entity Framework Core 3.1枚举转换失败

手指10

我正在使用Entity Framework Core 3.1并尝试对我的localdb中实体中的enum属性进行简单查询,但不断出现此错误:

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

实体:

public class DemoEntity
{
    [Key]
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Position Position { get; set; }
}

枚举-位置:

public enum Position
{
    [Display(Name = "Accountant")]
    Accountant,
    [Display(Name = "Chief Executive Officer (CEO)")]
    ChiefExecutiveOfficer,
    [Display(Name = "Integration Specialist")]
    IntegrationSpecialist,
    [Display(Name = "Junior Technical Author")]
    JuniorTechnicalAuthor,
    [Display(Name = "Pre Sales Support")]
    PreSalesSupport,
    [Display(Name = "Sales Assistant")]
    SalesAssistant,
    [Display(Name = "Senior Javascript Developer")]
    SeniorJavascriptDeveloper,
    [Display(Name = "Software Engineer")]
    SoftwareEngineer
}

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);
    }
}

我尝试添加价值转换:

  1. .HasConversion<string>() -没用
  2. .HasConversion(converter) -没用

当我如下查询表时,出现转换错误

try
{
    var test = await query.Where(x => x.Position.Equals(Position.Accountant)).ToListAsync();
}
catch (System.Exception e)
{
    //throw;
}

Position类型是NVARCHAR(MAX)在我的数据库。

在此处输入图片说明

在此处输入图片说明

我缺少任何简单的东西吗?无法找出我要去哪里。请协助。

伊万·斯托夫

由于基础数据库列类型为字符串,因此关联值转换器是正确的映射(默认情况下,EF Core映射enumint)。

所以这样的事情是必须的

modelBuilder.Entity<DemoEntity>()
    .Property(e => e.Position)
    .HasConversion<string>();

这导致了原来的问题。看起来您正在遇到EF Core查询翻译错误-表达式

x.Position.Equals(Position.Accountant)

被错误地翻译成类似

WHERE [d].[Position] = 0

而不是预期的

WHERE [d].[Position] = N'Accountant'

解决方案是使用比较运算符(==!=)代替Equals

x.Position == Position.Accountant

正确翻译。

通常当存在相应的C#运算符时,请避免使用Equals(and等)方法。CompareCompareTo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

EF Core ExecuteSqlCommandAsync:将nvarchar值'1,2'转换为数据类型int时转换失败

将 nvarchar 值“1,501,907”转换为数据类型 int 时转换失败

将varchar值'CA3'转换为数据类型int时转换失败

将varchar值'1,3'转换为SQL Server中的数据类型int时转换失败

将nvarchar值“ test”转换为数据类型int时转换失败

SQL:将nvarchar值“ XXX”转换为数据类型int时转换失败

将nvarchar值转换为数据类型int时转换失败

将nvarchar值'....'转换为数据类型int时转换失败

将nvarchar值“ Landmark Acq vPay”转换为数据类型int时转换失败

将nvarchar值转换为数据类型int时转换失败

Laravel为什么说“将nvarchar值'[]'转换为数据类型int时转换失败”

“将nvarchar值'113332,113347'转换为数据类型int时转换失败。”

将 varchar/nvarchar 值转换为数据类型 int 时转换失败

将nvarchar值'$ 28,926.25'转换为数据类型int时转换失败

CASE语句中的“将nvarchar值转换为数据类型int时转换失败”

将nvarchar值'6,7'转换为数据类型int时转换失败

将 nvarchar 值“01HP011”转换为数据类型 int 时转换失败

将数据类型NVarchar转换为int时出错

SQL Server转换错误:将nvarchar值“ XXX”转换为数据类型int时转换失败

“将 nvarchar 值“--”转换为 int 数据类型时出错。”

将 nvarchar 值“ ”转换为数据类型 int 时,SQL Server 数据库错误转换失败

转换nvarchar值'7575932'时转换失败。转换为int数据类型

将nvarchar值'29449,29446,29450,29534'转换为数据类型int时转换失败

在nopcommerce 4.3中将nvarchar值'abc'转换为数据类型int时转换失败

执行IDbConnection.Query会给出异常:将nvarchar值“内存转换为数据类型int”时转换失败

org.hibernate.exception.SQLGrammarException:将nvarchar值'ViewWebApp'转换为数据类型int时转换失败

将 nvarchar 值转换为数据类型整数

将varchar值'_1'转换为数据类型int时转换失败

将数据类型 nvarchar 转换为数字时出错