总结三种解决办法:
1.Mysql升级到7
2.Nuget安装Pomelo.EntityFrameworkCore.MySql 2.2.0替代MySql.Data.EntityFrameworkCore 8.0.16后正常.
PS:如果使用Pomelo库的SQL语句查询Convert.ToDateTime(item["createtime"]).ToString("yyyy-MM-dd HH:mm:ss")会报Unable to cast object of type 'MySql.Data.Types.MySqlDateTime' to type 'System.IConvertible'. 要改成Convert.ToDateTime(item["dskuupdatetime"].ToString()).ToString("yyyy-MM-dd HH:mm:ss").
3.EF上下文添加转换代码
1 protected override void OnModelCreating(ModelBuilder builder) 2 { 3 base.OnModelCreating(builder); 4 5 foreach (var entityType in builder.Model.GetEntityTypes()) 6 { 7 foreach (var property in entityType.GetProperties()) 8 { 9 if (property.ClrType == typeof(bool)) 10 { 11 property.SetValueConverter(new BoolToIntConverter()); 12 } 13 } 14 } 15 }
1 public class BoolToIntConverter : ValueConverter<bool, int> 2 { 3 public BoolToIntConverter( ConverterMappingHints mappingHints = null) 4 : base( 5 v => Convert.ToInt32(v), 6 v => Convert.ToBoolean(v), 7 mappingHints) 8 { 9 } 10 11 public static ValueConverterInfo DefaultInfo { get; } 12 = new ValueConverterInfo(typeof(bool), typeof(int), i => new BoolToIntConverter(i.MappingHints)); 13 }
PS: Linq Any转换失败:
var isExist = db.MyDbTable.Any(o => o.Id == id);
//throw No coercion operator is defined between types 'System.Int16' and 'System.Boolean',
要改成
var isExist = db.MyDbTable.FirstOrDefault(o => o.Id == id) != null;
对于Linq Any有其他解决办法吗?