实体框架核心DbContext.SaveChanges抛出System.InvalidCastException:无法将类型为System.Boolean的对象强制转换为类型为System.Int16

时间:2019-06-03 09:41:54

标签: c# mysql exception entity-framework-core

我正在将.net core 2.2与使用MySql.Data.EntityFramework.Core的实体框架一起使用。当我执行以下操作时,遇到此异常:

DbContext.MyDbSet.Add(new MyClass());
DbContext.SaveChanges();

例外:

  

System.InvalidCastException:无法转换类型的对象   System.Boolean键入System.Int16

我已将以下代码段添加到OnModelCreating函数中:

            foreach (var entityType in modelBuilder.Model.GetEntityTypes())
                foreach (var property in entityType.GetProperties())
                    if (property.ClrType == typeof(bool) || property.ClrType == typeof(Boolean))
                        property.SetValueConverter(new BoolToZeroOneConverter<Int16>());

我想念什么?

4 个答案:

答案 0 :(得分:0)

这是MySQL EF.Core实现中的错误:bug 93028

other sites上,人们报告通过切换到Pomelo.EntityFrameworkCore.MySql来解决此问题。

答案 1 :(得分:0)

这是由于数据库架构和模型不匹配,我添加了以下内容来解决此问题:

                    else if (property.ClrType == typeof(Nullable<bool>) || property.ClrType == typeof(Nullable<Boolean>))
                        property.SetValueConverter(new BoolToZeroOneConverter<Nullable<Int16>>());

答案 2 :(得分:0)

这通常是由于实体类属性类型和数据库列类型之间不匹配引起的。

答案 3 :(得分:0)

尝试belove代码:

[Required]
[Column(TypeName = "BIT")]
public bool IsDelete { get; set; }