MySql报错
1. 重复键报错1062- duplicate entry '0' for key 'xxx'
1.1 报错场景
在建立索引的时候报此错误。
1.2 报错原因
索引或者主键有重复键
1.3 解决方法
删除重复的索引或者主键条目,即可。
1.4 具体举例
给MAC建立索引表的时候,会报此错误,原因是原表中有重复键0,删除一个即可。
2. VS2019 nuget控制台类型不匹配报错
2.1 报错描述如下
Could not find type mapping for column 'alarms.id' with data type 'int unsigned zerofill'. Skipping column.
Could not scaffold the primary key for 'alarms'. The following columns in the primary key could not be scaffolded: id.
Unable to generate entity type for table 'alarms'.
2.2 报错场景
对接数据库是Mysql,使用VS2019 nuget控制台指令进行Dbfirst。在Dbfirst生成字段的时候,报此错误,无法生成对应表的字段。
2.3 报错原因
数据库侧对主键设置了无符号,填充零。
2.4 解决方法
使用Navicat管理Mysql,取消无符号,填充零。
3 数据库Varchar类型为空返回DBnull与服务端string类型不匹配报错
3.1 报错描述如下
System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'.
3.2 报错场景
服务程序字段类型为string, 数据库类型为varchar。当数据库为空的时候,返回DBnNull,与服务端String类型不匹配报错。
3.3 报错原因
类型不匹配
3.4 解决方法1
3.4.1 将数据库中为空的字段写入数据
3.4.2 当数据库返回DBNull时,将返回数据改成Null,网上有很多类似例子。
return (accountNumber == DBNull.Value) ? string.Empty : accountNumber.ToString()
备注:适合单条对象不匹配
3.4.3 配置文件Map里取消非空设置
builder.Property(c => c.AlarmName)
.HasColumnType("varchar(40)")
.HasMaxLength(40);
// .IsRequired();
builder.Property(c => c.AlarmType)
.HasColumnType("varchar(20)")
.HasMaxLength(20);
// .IsRequired();
备注:适合整个集合的不匹配
3.5 解决方法2(最优)
2019/8/6日更新。
public string? HKID { get; set; }
C#中加个可空类型即可完美解决问题。