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

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

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

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

使用 C# 9 records作为强类型ID - JSON序列化

在本系列上一篇文章中,我们注意到强类型ID实体,序列化为 JSON 时候报错了,就像这样: { "id": { "value": 1 }, "name":..."Apple", "unitPrice": 0.8 } 不过想了一下,这样意外也是在意料之中,强类型ID是record类型,而不是原始类型,因此将其序列化为一个对象是有意义,但这显然不是我们想要..., 对于反序列化,创建一个强类型id实例,然后给它赋值。...不过,还有有一个问题:我们只为添加了一个对于ProductId转换器,但我不想为每种类型类型ID添加另一个转换器!...,检查它是否实际上是强类型id,然后为该类型创建特定转换器实例,我们添加了一些缓存,避免每次都进行反射工作。

1.4K10

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

上一篇文章,我介绍了使用 C# 9 record类型作为强类型id,非常简洁 public record ProductId(int Value); 但是在强类型id真正可用之前,还有一些问题需要解决...ProductId,由于它不是int,是我们定义类型ID,并且没有关联类型转换器。...实现类型转换器 这里解决方案是为实现一个类型转换器ProductId,很简单: public class ProductIdConverter : TypeConverter { public...,如何在json中处理,是我们下一篇文章给大家介绍,现在还有一点是,我上面写了一个ProductId转换器,但是如果我们类型足够多,那也有很多工作量,所以需要一个公共通用转换器。...通用强类型id转换器 首先,让我们创建一个Helper •检查类型是否为强类型ID,并获取值类型•获取值得类型,创建并缓存一个委托 public static class StronglyTypedIdHelper

1.9K20

【TypeScript 演化史 -- 9】object 类型 和 字符串索引签名类型属性

当咱们试图访问此类对象上任意属性时,TypeScript 会提示编译时错误 // Type {} const obj = {}; // Error: 类型“{}”上不存在属性“prop” obj.prop...= "value"; 但是,仍然可以使用在 Object 类型上定义所有属性和方法,这些属性和方法通过JS 原型链调用: // Type {} const obj = {}; // "[object...Object]" obj.toString(); 字符串索引签名类型属性 在 TypeScript 2.2 之前,如果想访问带有字符串索引签名类型任意属性,就必须使用[]符号,但不允许使用.符号访问...在许多情况下,不再需要像这样令人不快变通方法: // 笨拙方式 (portNumbers as any).http = 80; 请注意,类型必须定义显式字符串索引签名,以便用.符号访问对任意属性都是类型正确...给定适当字符串索引签名,在这些情况下,就会获得更少类型错误,并且不再需要使用类型注释注释点属性访问,这只是为了让编译器通过。

1.3K10

如何通过反射获取属性名字和属性类型

显然我们事先不知道要查哪个表,泛型dao基本要求就是对所有的表都适用,这就需要我们动态获取表名,基本思想可以是方法中传入一个类(前提是数据库中表和实体类都是一一对应实例,通过反射获取这个实体类中属性名和属性类型...反射是java中一个很重要特性,在不知道类中信息时候,利用反射我们可以获取到类中所有的信息,例如属性名,属性类型,方法名,还可以执行类中方法,很强大,在框架中大多数也是采用反射获取类中信息。...,包括权限修饰符,属性类型属性名,这里String是java.lang.String,属性名和属性类型后面可以利用字符串截取获得实际想要数据。...也可以直接获取到属性类型,在Fileld类中有一个getGenericType方法: 在前面的for循环中加入下面这句话: String type = field.getGenericType().toString...); 输出: id name password aid

3.6K20

JS实现动态获取当前点击事件id属性

整个页面是通过ajax请求最新4部视频进行填充完成,视频列表又是通过template-web.js插件补上去,所以导致所有ID值都是一样,一开始给按钮添加一个事件,结果是所有播放按钮都是播放第一个视频...于是,想了好多办法,又把ID属性给弄成动态ajax请求属性值,实现了每个id不一样,接下来,因为点击播放要调用一个方法,进行解析视频播放,拼接成API+视频链接格式在新打开弹窗进行展示。...具体可以看下图: 要实现点击不同按钮,并且按钮ID是动态从ajax请求获取,还要添加点击视频拼接视频链接,参考了文章,可以获取点击按钮id值,然后使用button,将链接放在value中 Dom...对象id属性可以获取元素id值。...代码 function play(obj){ alert(obj.id) } 最后改造我代码,最后实现,完成拼接。

25.7K20

一篇”水文“带你解剖HTML中ID属性以及和Class属性区别。

我又来写”水文“了,回顾上篇讲到class属性,那么class属性和本篇要讲id属性有什么不一样呢?跟随笔者步伐,一一解剖。HTML中id属性直接先上个例子,看看效果,然后我们逐一剖析一下。...通过#id1和#id2来为h2和p元素设置了CSS属性呢。需要注意,id属性值在,在HTML文档中必须是唯一,并且它是对大小写敏感,这个要注意哦!...Class属性ID属性区别在上次分享中,我们讲到了class属性,那么它跟id属性有啥区别呢?简而言之就是class是可共享id是唯一。怎么说呢?...诚邀您关注,我们会持续分享运维和运维开发领域技术文章 彩虹运维技术栈社区9,公众号ID:TtrOpsStack 诚邀您关注,我们会持续分享运维和运维开发领域技术文章...在JavaScript中如何使用id属性?上次我们class属性时候,也有讲到js如何使用class属性。这次呢,我们讲讲js是如何使用id属性。我们先看小栗子,代码如下:<!

74610

获取对象属性类型属性名称、属性研究:反射和JEXL解析引擎

先简单介绍下反射概念:java反射机制是在运行状态中,对于任意一个类,都能够知道这个类所有属性和方法;对于任意一个对象,都能够调用它任意方法和属性;这种动态获取信息以及动态调用对象方法功能称为java...反射是java中一种强大工具,能够使我们很方便创建灵活代码,这些代码可以在运行时装配。在实际业务中,可能会动态根据属性去获取值。...fields[i].getType()); fieldNames[i] = fields[i].getName(); } return fieldNames; } /** * 获取属性类型...(type),属性名(name),属性值(value)map组成list * * @param o 实体 * @return */ public static List<Map<...getFieldValueByName(fields[i].getName(), o)); list.add(infoMap); } return list; } /** * 获取对象所有属性

6.4K50

哪种类型云硬盘不支持备份?云硬盘好用吗?

云硬盘被很多用户选择作为文件存储工具,不论是软件管理者或者是系统管理员。云硬盘优势还是非常明显,这些明显优势导致它市场占有率越来越高。...但其实云硬盘种类有多种,那么哪种类型云硬盘不支持备份呢?这一问题下文将会有一个介绍。 哪种类型云硬盘不支持备份? 1、VBD模式共享盘是不支持备份,只能进行简单读写命令。...因此该云硬盘是不支持备份。而这种云硬盘实际上在市场上已经非常少见了。 2、比较常见云硬盘有普通型、SSD云硬盘以及增强型SSD云硬盘。这三种云硬盘都是可以提供数据存储以及数据备份功能。...这些丰富功能让云硬盘能够成功迅速占领市场,成为更多用户选择。因此从易用性上来说,云硬盘是相当优秀。 哪种类型云硬盘不支持备份,我们在上文做了一个介绍。...一般VBD模式云硬盘是不支持备份,而其他大多数云硬盘都是可以实现备份功能,这让大家在使用云硬盘过程中不必担心数据丢失。

2.2K10

微信支付:当前商户号暂不支持关联该类型AppID

,一个认证300块,认证到最后了,绑定AppID去了,提示个:当前商户号暂不支持关联该类型AppID,真没谁了,找人工也难,这很腾讯 1.需要认证公众号订阅号或者服务号或者媒体类订阅号公众号 2....微信商户平台账户 问题 PC网站,要开通二维码扫码支付,申请使用NATIVE方式支付,按照文档引导,需要商户ID和appid绑定,登陆商户平台添加appi绑定微信认证订阅号公众号appid ,提示:当前商户号暂不支持关联该类型...AppID,然后去微信开放平台又花300块认证开发者资质,申请网站应用,给出一个appid去绑定,还是提示当前商户号暂不支持关联该类型AppID 场景 PC网站,需要开通扫描二维码支付 由于我们公众号是认证订阅号...,并不是服务号,而且也不属于媒体类型订阅号,所以一开始绑定公众号AppID提示并支持,后来去开放平台 注册了账户,又花了300块认证了开发者资质认证,申请开通了网站应用,开通之后,发现有微信支付能力,...打电话问客服说网站应用不支持微信支付,我去,不支持你放着干啥, 解决 由于我们是认证公众号订阅号,注意公众号认证需要花费300块,登陆微信公众平台 在里面申请注册微信小程序,由于公众号已经认证,注册完成之后会自动关联认证

7.4K30
领券