ASP.NET Core 6.0/8.0学习笔记(十七)——Fluent API主键配置

一、数据库存在的约束

1.数据库内存在五种约束,包括:主键约束、外键约束、非空约束、默认值约束以及唯一约束
主键约束:保证数据的完整性、唯一性、原子性,可以唯一确定表中的每一条记录。
唯一性约束:确保在非主键列中不输入重复的值。用于指定一个或者多个列的组合值具有唯一性,以防止在列中输入重复的值
检查约束:检查约束对输入列或者整个数据表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。检查约束通过数据的逻辑表达式确定有效值。
默认约束:默认约束指定在插入操作中如果没有提供输入值时,系统会自动指定插入值,即使该值是NULL;当必须向数据表中加载一行数据但不知道某一列的值,或该值尚不存在,此时可以使用默认值约束。默认约束可以包括常量、函数、不带变量的内建函数或者空值
非空约束:保证输入的数据不能为空值。

二、主键生成策略以及自增主键

1.主键生成策略:EFCore支持多种主键生成策略:自动增长、Guid、Hi/Lo算法等
2.自动增长: 优点:简单
缺点:数据库迁移以及分布式系统中比较麻烦,并发性能差
在保存数据更改后,数据库会自动为其配置主键的ID属性
3.自增字段不能使用代码为其赋值,否则报错

三、 Guid主键

1.Guid算法(或UUID算法)生成一个全局唯一的Id。适合于分布式系统,在进行多数据库数据合并的时候很简单。
优点:简单,高并发,全局唯一; 缺点:磁盘空间占用大,搜索性能低。
2.Guid值不连续。使用Guid类型做主键的时候,不能把主键设置为聚集索引。因为聚集索引是按照顺序保存主键的,因此用Guid做主键性能差。(涉及到物理排序)比如MySQL的InnoDB引擎中主键是强制使用聚集索引的。有的数据库支持部分的连续Guid,比如SQLServer中的NewSequentialId(),但也不能解决问题。在SQLServer等中,不要把Guid主键设置为聚集索引;在MySQL中,插入频繁的表不要用Guid做主键。

四、使用主键

1.默认主键:根据约定,字段名为“Id”或“类名/表名”+Id将被配置为实体的主键
2.在不存在默认约定的字段名称或者是主键另有指定的情况下,可以通过HasKey来设置主键:

builder.HasKey(x=>x.PropertyName).HasName("Name")

在这里插入图片描述
上面的代码将类中的AuthorId字段指定为主键并命名为“Author_Primary_Key”
例如,新建一个Bird类,在这个类中有Id、Name、Number三个属性,默认主键字段为Id。但是我们可以在配置类中使用上述方法将主键字段更改为Number:
Bird类:
在这里插入图片描述

Bird类的配置类:BirdConfig:在这里指定主键字段为Number:
在这里插入图片描述

同步到数据库:
在这里插入图片描述

打开数据库:
在这里插入图片描述

3.EF Core支持复合主键,但是不建议使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GISer_Qing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值