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

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

类型ID 实体通常是整数,GUID或者string类型,因为数据库直接支持这些类型,但是,如果实体ID类型是一样,比如都是整数ID,这有可能会出现ID值传错问题,看下边示例。...... } ... // 这个地方,参数传错了 AddProductToOrder(productId, orderId, int count); 在上面的代码中,我们犯了与第一个示例相同错误...(交换productId和orderId),但是在这种情况下,类型不同,因此编译器会捕获该错误并报告错误,我们仍然需要对其进行修复,但是至少在生产中并没有爆炸。...Record类型 Record 类型是具有内置不变性和值语义引用类型,它和上面我们写类型是一样(手动写成员实现Equals,GetHashCode等等),在代码中使用也非常简洁, 如果我们ProductId...主要区别在于:我们手动实现是struct,即值类型,但是记录是引用类型,这意味着它们可以为null,这可能不是主要问题,尤其是在使用可为空引用类型情况下,但是要知道这一点。

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

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

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

1.9K20

解决因C#8.0语言特性导致EFCore实体类型映射错误

检查数据库和迁移文件时发现Address这个字段被意外设置成nullable: false,而其它字段却正常,按理来说对于string类型属性,EFCore在codefirst模式下应该映射为可空类型...令人费解,在多次比对代码之后,发现是.csproj文件中这一行配置导致 enable 原因分析 C# 8 引入了一项名为可为 null 引用类型 (NRT)...通过查看EF文档了解到,可为空引用类型通过以下方式影响 EF Core 行为: 如果禁用可为空引用类型,则按约定将具有 .NET 引用类型所有属性配置为可选 (例如 string ) 。...如果启用了可为 null 引用类型,则基于属性 .NET 类型 C# 为 Null 性来配置属性:string? 将配置为可选属性,但 string 将配置为必需属性。...换而言之,启用了该功能后,把原本《引用类型可为空》这个传统约定,更改称为了《引用类型是否可为空,是通过?语法来表明》,实体中string类型属性在C#中作为引用类型,自然而然地受到了这个影响。

19420

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

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

1.4K10

将MapperScan错误使用导致BindingException问题

因此也想尝试下生成代码使用效果。 此外,由于不想建多个project来进行测试,因此对于不同测试,都在src/main/java下面弄各种不同包来进行区分。...本次测试package:com.dhb.gts.javacourse.week6.mysqltest目录。...key=100033 出现如下错误: 2021-09-13 18:02:57.507 ERROR 16620 --- [nio-8084-exec-1] o.a.c.c.C.[.[.[/]....于Starter所在 com.dhb.gts.javacourse.week6.mysqltest不在同一个目录,因此无法通过扫描下层目录方式扫描到对应类,因此只能通过手动配置scan。...但是实际上这是一个错误做法,MapperScan只能用来配置Mapper,而如果要指定Startler之后扫描目录,则需要在@SpringBootApplication中指定: 代码修改如下: package

1.4K30

又一起由 VMware 导致网络错误

重复错误 电脑网卡又报错“Windows仍在设置此设备类配置(代码56)”了,第一反应是这种错误已经出现过而且解决过一次了.....我至今还是认为是磁盘错误系统给我删了,我自己是绝对不会去删,而且我也没有一点印象。...)下载软件然后传输到电脑(当然,我有个四合一U盘/安卓/苹果/typec) 值得吐槽点是苹果手机不支持拷贝 .exe 程序,只能拷贝压缩文件到u盘设备,只能是再在苹果下个压缩软件把exe压缩了再传了。...总结 说白了就是因为系统把我软件误删之后导致错误,这种是不可避免,能做只能是记录踩过坑,目前是这样。...上次以为是重置网络导致,而这次则是因为软件被删导致(非人为) 搞也搞了一天才搞好,写篇记录下也好。

15210

Python脚本中使用 if 语句导致错误代码

在 Python 脚本中使用 if 语句是一种常见控制流程结构,用于根据条件决定程序执行路径。当使用 Python 中 if 语句时,可能会导致一些常见错误。...下面就是我经常遇到错误代码示例及其可能原因和解决方法,希望对大家有些帮助,少走弯路。...Audio": ^用户提供了完整代码,其中包含了多个 elif 语句,用于处理不同文件类型转换。...然而,当用户运行脚本时,却遇到了上述错误。2、解决方案经过分析,错误原因在于用户在代码中混用了制表符和空格。...在 Python 中,制表符通常被解释为 8 个空格,但用户在编辑器中配置制表符宽度却为 4 个空格。这导致了代码中某些行缩进不正确,从而引发了错误

12410

SpringMVC注解@RequestMapping之produces属性导致406错误

这个问题网上解决办法写狠是粗糙,甚至说这次我干掉它完全是靠巧合,但是也不否认网上针对406错误给出解决方式,可能是多种情况下出现406吧?...我这次流程就是集成了MyBatis分页插件,简单实现了一个分页功能,最后将数据返回给浏览器,就因为我随手一粘贴,才引发了这场406,别忘了各位看图说话。 ?        ...我首先说说我惨痛经历吧,一直对spring框架AOP原理狠是模糊,就在上周五自己想好好研究一下,但是很多美好事情都不是那么一路绿灯,磕磕绊绊总算是差不多了,但是在最后给我返回一个406错误,这可是我第一次碰到这种傻逼错误...,真的,对于我这个2年猿来说确实有点手忙错乱,最后我靠着网上一些指点凭直觉把它干掉了,在这里给分为分享一下。        ...itemService.findItemByPage(Integer.parseInt(currentPage), Integer.parseInt(pageSize)); 5 }        这种错误我理解还不是狠透彻

2K60

分析一个错误使用MemoryCache导致BUG

这个Bug是我在项目中发现,原因是MemoryCache使用不当造成了一个不小Bug,虽说这个Bug很大部分人都知道,但是我觉得还是分享出来,记录一下。...List vs) { string v= string.Join("--", vs); Console.WriteLine(v); } 好了,来想一下上面的输出结果会是什么吧,期望结果应该是每次都输出小于等于输入值...,实际是什么样呢?...实际输出结果如下: 从上图中第二次输出结果是不是和你想不一样呢,之所以出现上面问题是因为MemoryCache对象是直接保存在内存中,缓存不变化时每次都返回同一个对象,如果发生了修改那么再次获取就是修改后内容...: 总结: MemoryCache背后其实就是ConcurrentDictionary,value其实是带着过期时间CacheEntry,因此 在不过期并且没有发生变化时候每次返回都是同一个缓存对象

37520

bcache导致xfs文件系统错误问题分析

xfs带有日志,如果日志数据被改错,最容易出现xfs报出来故障。最常见错误就是,两台虚拟机同时使用块设备,典型例子就是把一个卷同时挂载给两个虚拟机,虚拟机跑一会,几乎问题必现。...对于passthrough情况,是右侧直接使用driver场景。 如果物理机上有进程修改了磁盘数据,就要排查另外两种情况使用。 对于使用vfs情况,一定要mount具体文件系统才行。...出现问题磁盘都没有被mount过,这种情况排除。 对于访问/dev/sdx裸设备方式,使用脚本,对所有进程执行lsof,查看所有进程打开文件。这种情况也排除。...hdd在guest中被添加成为bcache类型磁盘,实际操作是向hdd盘header中写入bcachemagic。在host上,磁盘被加载时候,同样可以扫描到bcache类型header。...最终,导致hdd中数据异常,被guest中xfs发现,报出来了文件系统错误。 4,disable bcache 解决办法很简单,在host上禁用bcache就行了。

2.2K81

C++cin输入错误导致死循环

C++cin输入错误导致死循环 今天在写代码时候遇到一个bug,也是在无意中发现,当我乱输入时候(乱敲键盘那种),程序会出现死循环。...简版: int a = 0; while(true) { cout <<"请输入数字"<< endl; cin>>a; } 看似一段简单代码,当胡乱输入时候就会导致程序死循环,无限打印...while(cin.fail()) { cout <<"请输入数字"<< endl; cin >> a; cin.clear(); //cin.clear()作用是清除cin错误状态...cin.ignore(); //cin.ignore()作用是忽略掉缓冲区内容,直到遇到EOF为止 } 网上还有使用cin.fail。...cin.fail()是判断cin状态,如果cin为错误状态则返回1,正常状态则返回0 目前我没有使用这个,但死循环确实不存在了。

1.4K21
领券