首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用 C# 9 records作为强类型ID - 初次使用

强类型ID 实体通常是整数,GUID或者string类型,因为数据库直接支持这些类型,但是,如果实体ID类型是一样,比如都是整数ID,这有可能会出现ID值传错问题,看下边示例。...幸运是,可以定义强类型id来解决这个问题,这个想法很简单,为每个实体ID声明一个特定类型,现在需要这样写: // 使用强类型ID代替整数ID public void AddProductToOrder...a.Equals(b); } 上面的代码没什么难,但是如果每个实体都需要的话,那确实有点麻烦,在C# 9 可以使用source generators来完成这些,但是C# 9还引入了另一个功能,使用起来更方便...主要区别在于:我们手动实现是struct,即值类型,但是记录是引用类型,这意味着它们可以为null,这可能不是主要问题,尤其是在使用可为空引用类型情况下,但是要知道这一点。...现在为模型中每个实体编写一个强类型id是不是很简单,使用Record 非常方便,当然,还有其他问题需要考虑,例如JSON序列化,与Entity Framework Core一起使用等,但这是另一篇文章故事

51820
您找到你想要的搜索结果了吗?
是的
没有找到

使用 C# 9 records作为强类型ID - 路由和查询参数

上一篇文章,我介绍了使用 C# 9 record类型作为强类型id,非常简洁 public record ProductId(int Value); 但是在强类型id真正可用之前,还有一些问题需要解决...ProductId,由于它不是int,是我们定义强类型ID,并且没有关联类型转换器。...": 0.8 } 现在是返回了,但是还有点问题,id 在json中显示了一个对象,如何在json中处理,是我们下一篇文章给大家介绍,现在还有一点是,我上面写了一个ProductId转换器,但是如果我们类型足够多...通用强类型id转换器 首先,让我们创建一个Helper •检查类型是否为强类型ID,并获取值类型•获取值得类型,创建并缓存一个委托 public static class StronglyTypedIdHelper...; } } 到这里,我们可以直接删除之前 ProductIdConvert, 现在有一个通用可以使用,现在.NET Core 路由匹配已经没有问题了,接下来文章,我会介绍如何处理在JSON

1.9K20

InnoDB引擎为什么推荐使用自增ID作为主键?

如果主键是非自增 id,为了确保索引有序,MySQL 就需要将每次插入数据都放到合适位置上。...这就造成了页分裂,这个大量移动数据过程是会严重影响插入效率。 自增id 可以保证每次插入时B+索引是从右边扩展,可以避免B+树频繁合并和分裂(对比使用UUID而言)。...如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。 ◆ 一、InnoDB中B+树 先理解InnoDB中B+树,如图所示。...如果表使用自增主键,那么每次插入记录,记录就会顺序添加到当前索引节点后续位置,当一页写满,就会自动开辟一个新页。如下图所示: 这样就会形成一个紧凑索引结构,近似顺序填满。...普通索引叶子节点上保存是主键 id 值,如果主键 id 占空间较大的话,那将会成倍增加 MySQL 空间占用大小。 ◆ 三、什么时候不需用自增主键?

3.1K30

SQL Server 返回最后插入记录自动编号ID

当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上插入,另一个是作为触发器结果在 T2 上插入。...@@IDENTITY 返回插入到当前会话中任何作用域内最后一个 IDENTITY 列值,该值是插入 T2 中值。...SCOPE_IDENTITY() 返回插入 T1 中 IDENTITY 值,该值是发生在相同作用域中最后一个 INSERT。...ajqc实验:(40条本地线程,40+40条远程线程同时并发测试,插入1200W行),得出结论是: 1.在典型级联应用中.不能用@@IDENTITY,在CII850,256M SD机器上1W...使用示例: Insert into tablename values() select @@IDENTITY Insert into tablename values() select IDENT_INCR

2.2K40

为什么MySQL不推荐使用uuid或者雪花id作为主键?

key作为主键,其它我们完全保持不变....根据控制变量法,我们只把每个表主键使用不同策略生成,而其他字段完全一样,然后测试一下表插入速度和查询速度: 注:这里随机key其实是指用雪花算法算出来前后不连续不重复无规律id:一串18位长度...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id索引结构对比 2.1.使用自增id内部结构 ? 自增主键值是顺序,所以Innodb把每一条记录都存储在一条记录后面。...结论:使用innodb应该尽可能按主键自增顺序插入,并且尽可能使用单调增加聚簇键值来插入新行。 2.3.使用自增id缺点 那么使用自增id就完全没有坏处了吗?...,如果要改善需要调优innodb_autoinc_lock_mode配置 三、总结 本篇博客首先从开篇提出问题,建表到使用jdbcTemplate去测试不同id生成策略在大数据量数据插入表现,然后分析了

3.8K20

使用雪花 id 或 uuid 作为 MySQL 主键,被老板怼了一顿!

, uuid 作为主键, 随机 key 作为主键, 其它我们完全保持不变....带着疑问, 我们来探讨一下这个问题: ### 二、使用 uuid 和自增 id 索引结构对比 **2.1 使用自增 id 内部结构** !...结论:使用 innodb 应该尽可能按主键自增顺序插入,并且尽可能使用单调增加聚簇键值来插入新行 **2.3 使用自增 id 缺点** 那么使用自增 id 就完全没有坏处了吗?...生成策略在大数据量数据插入表现,然后分析了 id 机制不同在 mysql 索引结构以及优缺点,深入解释了为何 uuid 和随机不重复 id 在数据插入性能损耗,详细解释了这个问题。...在实际开发中还是根据 mysql 官方推荐最好使用自增 id,mysql 博大精深,内部还有很多值得优化点需要我们学习。

2.9K00

使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

作为主键,其它我们完全保持不变.根据控制变量法,我们只把每个表主键使用不同策略生成,而其他字段完全一样,然后测试一下表插入速度和查询速度: 注:这里随机key其实是指用雪花算法算出来前后不连续不重复无规律...带着疑问,我们来探讨一下这个问题: # 使用uuid和自增id索引结构对比 1.使用自增id内部结构 自增主键值是顺序,所以Innodb把每一条记录都存储在一条记录后面。...结论:使用innodb应该尽可能按主键自增顺序插入,并且尽可能使用单调增加聚簇键值来插入新行 3.使用自增id缺点 那么使用自增id就完全没有坏处了吗?...,如果要改善需要调优innodb_autoinc_lock_mode配置 # 总结 本篇文章首先从开篇提出问题,建表到使用jdbcTemplate去测试不同id生成策略在大数据量数据插入表现,然后分析了...id机制不同在mysql索引结构以及优缺点,深入解释了为何uuid和随机不重复id在数据插入性能损耗,详细解释了这个问题。

1.5K10

使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

springjdbcTemplate来实现增查测试: 1.3.程序写入结果 1.4.效率测试结果 二、使用uuid和自增id索引结构对比 2.1.使用自增id内部结构 2.2.使用uuid索引内部结构...2.3.使用自增id缺点 三、总结 ?...,user_random_key,分别表示自动增长主键,uuid作为主键,随机key作为主键,其它我们完全保持不变....根据控制变量法,我们只把每个表主键使用不同策略生成,而其他字段完全一样,然后测试一下表插入速度和查询速度: 注:这里随机key其实是指用雪花算法算出来前后不连续不重复无规律id:一串18位长度...结论:使用innodb应该尽可能按主键自增顺序插入,并且尽可能使用单调增加聚簇键值来插入新行 2.3.使用自增id缺点 那么使用自增id就完全没有坏处了吗?

2.1K10

使用雪花id或uuid作为MySQL主键,被老板怼了一顿!

磊哥,前几天在做项目demo时候,使用雪花id或uuid作为Mysql主键,被老板怼了一顿!...key作为主键,其它我们完全保持不变.根据控制变量法,我们只把每个表主键使用不同策略生成,而其他字段完全一样,然后测试一下表插入速度和查询速度: 注:这里随机key其实是指用雪花算法算出来前后不连续不重复无规律...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id索引结构对比 2.1 使用自增id内部结构 ? 自增主键值是顺序,所以Innodb把每一条记录都存储在一条记录后面。...结论:使用innodb应该尽可能按主键自增顺序插入,并且尽可能使用单调增加聚簇键值来插入新行 2.3 使用自增id缺点 那么使用自增id就完全没有坏处了吗?...,如果要改善需要调优innodb_autoinc_lock_mode配置 三、总结 本篇博客首先从开篇提出问题,建表到使用jdbcTemplate去测试不同id生成策略在大数据量数据插入表现,然后分析了

7.5K31

使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

根据控制变量法,我们只把每个表主键使用不同策略生成,而其他字段完全一样,然后测试一下表插入速度和查询速度: 注:这里随机key其实是指用雪花算法算出来前后不连续不重复无规律id:一串18位长度...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id索引结构对比 2.1 使用自增id内部结构 自增主键值是顺序,所以Innodb把每一条记录都存储在一条记录后面。...减少了页分裂和碎片产生 2.2 使用uuid索引内部结构 因为uuid相对顺序自增id来说是毫无规律可言,新行值不一定要比之前主键值要大,所以innodb无法做到总是把新行插入到索引最后...结论:使用innodb应该尽可能按主键自增顺序插入,并且尽可能使用单调增加聚簇键值来插入新行 2.3 使用自增id缺点 那么使用自增id就完全没有坏处了吗?...本篇博客首先从开篇提出问题,建表到使用jdbcTemplate去测试不同id生成策略在大数据量数据插入表现,然后分析了id机制不同在mysql索引结构以及优缺点,深入解释了为何uuid和随机不重复

1.2K20

为什么「福强私学」用email作为注册账户标识ID

原文链接 https://afoo.me‍ 虽然我知道人群老早就转移到了手机上,Mobile-first也喊了好多年,但用email做用户唯一标识id可以说是我一个执念,虽然我也知道这个执念从商业或者产品角度来看...现在可能大家都意识到手机号成了很重要“资产”,不经常换了,也算是现实巩固了手机号作为用户表示地位吧。...我认为,作为用户标识ID信息需要有至少两个重要属性: 跟用户唯一绑定 跟用户终身绑定 手机号都不能满足,但email相对来说更容易满足,只要邮件服务商不倒闭或者域名可以自己一直续。...使用email作为用户标识ID最主要一个考量是,email账户本身就有很强安全性,假如加上2FA(两阶段安全认证)都不能保证账号安全,那么,任何一个基于email做账户标识系统其实都无法保证。...所以,唯一、终身、安全,这就是「福强私学」选择email作为注册账号主体标识原因。很多流程也基于此进行设计。

7810

Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中问题排查

今天在使用数据库时候,遇到一个场景,即在插入数据完成后需要返回此数据对应自增主键id,但是在使用Mybatis中generatedKey且确认各项配置均正确无误情况下,每次插入成功后,返回都是...1,而不是最新自增Id。...终于凭借着一次Debugg发现问题,原来在使用Mabatis中insert或者insertSelective方式插入时,如使用int insert(TestGenKey testGenKey)时,返回值...int表示插入操作受影响行数,而不是指自增长id,那么返回自增id到底去哪里了呢?...null : sex.trim(); } } 测试及Debugg 编写测试方法测试插入 插入成功后观察对应变量对应值 总结:调用Insert后插入操作之后,所得到自增长Id被赋值到原对象当中

1.5K10

react-id-swiper 使用

封装了非常成熟 iDangerous Swiper ,基本可以在大部分“滑动”场景中使用,无论是顶部 banner 轮播、image gallery,还是横/竖向手势切换内容,都能用上。...有丰富参数、事件监听可供调用。使用门槛低,无论是在函数组件里还是在类组件中,很容易调用。...在 2.1.0 之后 react-id-swiper 用起了 React Hook,demo 里给出基本都是函数组件使用方法。...笔者使用场景则是在类组件中,和函数组件不太一样地方主要在如何获取 swiper 对象 ( react-id-swiper 作者给了 Hook 写法 demo ),进而使用方法和属性。...按照文档安装后,假设现在需要在 A 组件中使用 Swiper,A 组件是一个竖向整屏滑动长列表,效果可以参考 fullpage 官网首页: // A.js import Swiper from 'react-id-swiper

4.5K20
领券