如何使EF Core不插入MySql中自增长的主键(踩坑实录)
时间:2020-04-14
本文章向大家介绍如何使EF Core不插入MySql中自增长的主键(踩坑实录),主要包括如何使EF Core不插入MySql中自增长的主键(踩坑实录)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
公司要求使用 .Net Core + EF Core + Mysql 开发项目,为了以后可以部署到Linux服务器上,实际是奇葩的客户需求。
数据库设计时虽然大部分表的主键都采用了UUID(也就是SQL Server的GUID),好处是啥我也就不(bu)说(hui)了(shuo),大家自行百度下吧。
而对于一些不是那么重要的表,或者说会经常产生大量数据的表,我们都是用自增长的主键,然后重点来了,在使用“Scaffold”命令生成实体类的时候,是下面这样的:
public partial class File { public int Id { get; set; } public string FileName { get; set; } public string FileType { get; set; } public string FileSize { get; set; } public string FilePath { get; set; } public string ProId { get; set; } public string CreateUser { get; set; } public string CreateUserName { get; set; } public DateTime CreateTime { get; set; } public int IsDel { get; set; } }
可以看到,该表的Id是Int型,也就是自增长的主键,而如果我们直接使用的话,那么在你不对主键赋值的情况下,第一次肯定是插入0,第二次就直接报错了,会提示你主键重复。
也就是Id并没有自增,EF Core直接给主键赋值为0,并执行插入。那么怎么才能告诉EF Core我这张表的Id是自增的呢?
经过百度,查到的答案是加特性,如下:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
或者
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
告诉EF Core它是自增的,你不要管我啦。然后你以为这样结束了?不好意思,一样报错,哈哈。正确答案是:
public partial class File { [DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get; set; } }
没错应该使用“DatabaseGeneratedOption.None”的特性,官方注释是“The database does not generate values”。
虽然不知道为啥这个最不靠谱的却是正确的,但事实如此。加上这个特性后,插入时不用对Id做任何操作,直接会自增长,多少条都能保存成功。
我也是把三个类型试了遍才发现的,写下来给大家提个醒,可以少走点弯路。
原文地址:https://www.cnblogs.com/lxc89/p/12699628.html
- crontab导致的频繁发送邮件的问题(r5笔记第20天)
- 再学习之Spring(依赖注入).
- 使用序列的问题ORA-02287(r5笔记第19天)
- Java多线程详解2
- Java多线程详解3
- SpringMVC处理multipart请求.
- 一条简单的sql语句运行15天的原因分析(r5笔记第17天)
- 巧用flashback database实现灵活的数据回滚(r5笔记第16天)
- Spring Cache For Redis.
- css重写checkbox样式
- 通过shell脚本同时监控多个数据库负载(r5笔记第14天)
- Java 定时器 Timer 的使用.
- 通过shell脚本来统计段大小(r5笔记第14天)
- Linux下配置MySQL主从复制(r5笔记第13天)
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解