陕西省建设资格注册中心网站,合肥大型网站制,页游排行榜前十名网络游戏,wordpress附件分离主键
自增主键
1、EF Core支持多种主键生成策略:自动增长;Guid;Hi/Lo算法等。 2、自动增长。 优点:简单; 缺点: 数据库迁移以及分布式系统中#xff08;多数据库合并#xff0c;会有重复主键值#xff09;比较麻烦;并发性能差#xff08;大并发情况下#xff0c;为了保证…主键
自增主键
1、EF Core支持多种主键生成策略:自动增长;Guid;Hi/Lo算法等。 2、自动增长。 优点:简单; 缺点: 数据库迁移以及分布式系统中多数据库合并会有重复主键值比较麻烦;并发性能差大并发情况下为了保证自增且不重复会加锁。 long、int等类型主键默认是自增。因为是数据库生成的值所以SaveChanges后会自动把主键的值更新到Id属性。试验一下。场景: 插入帖子后自动重定向帖子地址。 3、自增字段的代码中不能为Id赋值必须保持默认值0.否则运行的时候就会报错
示例SaveChanges后会自动把主键的值更新到Id属性 为主键指定值会报错
Guid主键
1、Guid算法 (或UUID算法) 生成一个全局唯一的Id。适合于分布式系统在进行多数据库数据合并的时候很简单。优点:简单高并发全局唯一;缺点: 磁盘空间占用大。 2、Guid值不连续。使用Guid类型做主键的时候不能把主键设置为聚集索引。因为聚集索引是按照顺序保存主键的因此用Guid做主键性能差。比如MySQL的InnoDB引警中主键是强制使用聚集索引的。有的数据库支持部分的连续Guid比如SOLServer中的NewSeguentialId()但也不能解决问题。在SQLServer等中不要把Guid主键设置为聚集索引; 在MySQL中插入频繁的表不要用Guid做主键。 3、演示Guid用法:既可以让EF Core给赋值也可以手动赋值 (推荐)
示例 运行多次每次生成的数据都不同
guid 使用示例
1.新建 Rabbit 类 在DbContext中 配置
命令执行 结果 插入数据 默认方式 运行结果 手动方式 其他方案
1、混合自增和Guid(非复合主键) 。用自增列做物理的主键而用Guid列做逻辑上的主键。把自增列设置为表的主键而在业务上查询数据时候把Guid当主键用。在和其他表关联以及和外部系统通讯的时候(比如前端显示数据的标识的时候)都是使用Guid列。不仅保证了性能而且利用了Guid的优点而且减轻了主键自增性导致主键值可被预测带来的安全性问题别人通过某一个数据能预测到后面的数据。爬取你的数据。 2、Hi/Lo算法:EF Core支持Hi/Lo算法来优化自增列。主键值由两部分组成:高位 (Hi) 和低位 (Lo)高位由数据库生成两个高位之间间隔若千个值由程序在本地生成低位低位的值在本地自增生成。不同进程或者集群中不同服务器获取的Hi值不会重复而本地进程计算的Lo则可以保证可以在本地高效率的生成主键值。但是HiLo算法不是EF Core的标准