RT,以前的ef for mysql ,定义c# bool, mysql tinyint(1),来存储bool 值,net core 里边会报错, Unable to cast object of type 'System.Boolean' to type 'System.SByte'.
如果用bit(1),好像值更新有问题, false 也会存成1, 这个问题有遇到的吗?
在连接字符串中加上 TreatTinyAsBoolean=true
试试
找到问题了, core 里边针对mysql ,bool类型我 定义了 bit(1),正常情况下 都是可以更新匹配的,0对应false,1对应 true, 但是如果 在dbcontext 中定义表的地方 增加 HasDefaultValueSql的话, 问题就来了。
entity.Property(e => e.IsAllProduct) .HasColumnType("bit(1)") .HasDefaultValueSql("'1'");
比如,表A中的这个字段,默认值是 1,也就是true,当使用 context.A.Add(modelA)的时候,IsAllProduct传的值是false,也就是0, 但是ef会强制取 default的值'1',从打印出来的sql可以看出来,dudu大神 你可以试一下,应该是个 bug吧。
两个sql分别是 加了 HasDefaultValueSql 和 没加 HasDefaultValueSql 生成的sql,加了个强制取default,没加的取实体给的值
@死神的背影: 可以试试 .HasDefaultValue()
,并在定义 IsAllProduct
属性的地方将默认值设置为 true
补充一下,连接串 加 TreatTinyAsBoolean=true 这句是OK的,加上就好了
@死神的背影: 果然解决了,很神奇的问题