首页 新闻 搜索 专区 学院

asp.net ef mysql 生成插入语句自增长Id为0,报错:存储区更新、插入或删除语句影响到了意外的行数(0)......

0
悬赏园豆:50 [待解决问题]

环境:asp.net ef mysql Code First
问题:两张差不多的表,添加数据时其中一张表报错:存储区更新、插入或删除语句影响到了意外的行数(0)......,通过打印生成的Sql观察到,问题应该是出在自增长Id上。

添加成功表:

测试添加:

添加失败表:

测试添加:

手动给Id赋一个正常的值是能够添加成功的
使用modelBuilder.Entity<cz_t2_gz_insured_info>()
.Property(e => e.id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
注解Id字段也能正常添加。但是以往都不需要去这么做的.
 
Id也都是自增长列,不知道两张表有啥差别,导致ef生成的Sql语句出现Id为0的情况。

 
已解决:
我去掉了数据库时间的默认值:CURRENT_TIMESTAMP

表中CreateTime 使用了默认值,CURRENT_TIMESTAMP
而ef生成的实体中就会出现如下注解

该注解像是能影响主键生成的sql,一但加到CreateTime上面,打印出来的添加sql语句上就会出现Id=0,然后就会失败

去掉注解后,打印的添加Sql上的Id=0就不见了,就能成功添加了,也不晓得啥原因,

JoyQY的主页 JoyQY | 菜鸟二级 | 园豆:212
提问于:2020-08-25 11:00
< >
分享
所有回答(2)
0

mysql插入的时候,会自动将Id=0的 Id替换为自增Id,这个你可以放心。除非Id不是自增。你要看下你EF的配置,应该是那里出了问题

flyfishing | 园豆:915 (小虾三级) | 2020-08-25 13:30

没有替换啊,生成的sql不能出现Id=0 的情况,我觉得得找出啥原因出现了id=0

支持(0) 反对(0) JoyQY | 园豆:212 (菜鸟二级) | 2020-08-25 16:57

@JoyQY: 我说的是你可以手工insert 一条数据,把id置为0 ,你就知道 id=0 能不能插入成功。能去确定id=0是否有问题。

支持(0) 反对(0) flyfishing | 园豆:915 (小虾三级) | 2020-08-25 21:09
0

DatabaseGeneratedOption.Identity标识下EF认为由数据库更新,会再操作完查询数据,从新赋值到对象上

通信的搞程序 | 园豆:1532 (小虾三级) | 2020-08-26 21:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册