学习EF Core第三天 主键

EF Core支持多种主键生成策略:自动增长;GUID;HI/Lo算法等。

自增主键

   1、优点:简单
  2、缺点:数据库迁移以及分布式系统中比较麻烦,并发性能差
  3、short int long类型主键默认自增
  4、SaveChanges后会自动把主键的值更新到Id属性。例如:插入帖子后,自动重定向帖子地址
  5、自增字段的代码中不能为Id赋值,必须保持默认值0,否则运行报错
  6、自增的值是由数据库生成,而非EF Core或手动。

Guid算法

    1、优点:简单、高并发、全局唯一、适用分布式系统、多数据库合并时很简单
  2、缺点:磁盘空间占用大。
  3、生成全局唯一的Id
  4、Guid值不连续,使用Guid类型做主键的时候,不能把主键设置为聚集索引。因为聚集索引是按照顺序保存主键的,因此用Guid做主键性能查。Mysql的InnoDB引擎中主键是强制使用聚集索引。有的数据库支持部分的 连续Guid,比如SQL SERVER中的NewSequentialId(),但是也不能解决问题。在Sql Server等中不用把Guid主键设置为聚集索引;在Mysql中,插入频繁的表不要使用Guid做主键。
  5、实体类设置Guid类型主键。

//设置Guid类型的主键
public Guid Id { get; set; }


  6、对需要存入数据库的实体类类型的变量,如果提手动赋值一个Guid值,那么EF CORE就会使用提前手动设置的Guid值存入数据库,如果没有提前手动赋值EF Core会自动生成一个Guid值。建议使用手动赋值Guid方法。

混合主键

混合自增和Guid(非复合主键)。用自增列做物理的主键,而用Guid列用逻辑上的主键。把自增列设为表的主键,而在业务上查询数据时候把Guid当主键用。在和其他表关联关联以及和外部系统通讯的时候(比如前端显示数据的标识的时候)都是使用Guid列。保证了性能,利用了Guid的优点,减轻了主键自增性导致主键值可被预测带来的安全性问题。

Hi/Lo算法

主键由高位(Hi)和低位(Lo)组成,高位由数据库生成,两个高位之间间隔若干值,低位由本地程序自增生成。不同进程或者集群中不同服务器获取的Hi值不会重复,而本地进程计算的Lo则可以保证可以在本地高效率的生成主键值。但是HiLo算法不是EF Core的标准。


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值