asp.net ef mysql 生成插入语句自增长Id为0,报错:存储区更新、插入或删除语句影响到了意外
时间: 2020-08-25来源:博客园
前景提要
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就不见了,就能成功添加了,也不晓得啥原因,
asp.net ef mysql asp.net mvc JoyQY | 菜鸟二级 | 园豆: 212
提问于:2020-08-25 11:00 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(2) 0 mysql插入的时候,会自动将Id=0的 Id替换为自增Id,这个你可以放心。除非Id不是自增。你要看下你EF的配置,应该是那里出了问题 flyfishing | 园豆:454 (菜鸟二级) | 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 | 园豆:454 (菜鸟二级) | 2020-08-25 21:09 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 DatabaseGeneratedOption.Identity标识下EF认为由数据库更新,会再操作完查询数据,从新赋值到对象上 通信的搞程序 | 园豆:1189 (小虾三级) | 2020-08-26 21:36 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行