EF Core关系配置
关系配置推荐IDE:JetBrains Rider 一对多一对多是最常见的实体类的关系。比如文章和评论的关系就是一对多的关系,也就是一篇文章对应多条评论。 文章 1234567class Article{ public long Id { get; set; } //主键 public string Title { get; set; } //标题 public string Massage { get; set; } //内容 public List<Comment> Comments { get; set; }= new List<Comment>(); //此评论的多条评论} 评论 123456class Comment{ public long Id { get; set; } //主键 public string Massage { get; set; }...
EF Core入门
EF Core入门不同的EF Core数据库提供的质量参次不齐,除了微软官方的Microsoft SQL Server的EF Core数据库提供程序之外,还存在着很多第三方的EF Core数据库提供程序,它们对于EF Core的支持大部分是一致的,但是会有细微的差别。 EF Core环境搭建无论是在控制台项目中还是在ASP.NET Core项目中,EF Core的用法都是一样的。EF Core用于将对象和数据库中的表进行映射,因此在进行EF Core开发的时候,需要创建C#类(也叫作实体类)和数据库表两项内容。在经典的EF Core使用场景下,由开发人员编写实体类,然后EF Core可以根据实体类数据库表。 创建一个.NET Core控制台项目,然后再项目中创建Book实体类。1234567class Book{ public long Id { get; set; }//主键 public string Title { get; set; }//标题 public DateTime PubTime...
EF Core实体类配置
EF Core实体类配置约定大于配置主要的约定规则规则1:数据库表名采用上下文类中对应的DbSet的属性名。规则2:数据库表列的名字采用实体类属性的名字,列的数据库类型采用和实体类属性类型兼容的类型。比如在SQL Server中,string类型对应nvarchar,long类型对应bigint.规则3:数据库表列尔可空性取决于对应实体类熟悉的可空性。规则4:名字为Id的属性为主键,如果主键为short、int或者long类型,则主键默认采用自动增长类型的列。 Data Annotation(数据注解)Data Annotation指的是可以使用.NET提供的Attribute对实体类、属性等进行标注的方式来实现实体类配置。比如通过[Table(“T_Books”)],我们可以把实体类对应的表名配置为T_Books; 123456789//指定表名[Table("T_Cats")]class Cat{ public int Id { get; set; }//主键 [Required]//非空 ...
日志
日志日志(logging)是程序运行中的“黑匣子”,在程出现问题以后,我们可以通过分析日志来查询问题。 .NET Core日子基本使用.NET Core中的日志系统可以把日志记录到控制台、事件日志、调试窗口等地方,还可以使用第三方日志提供程序把日志记录到文件、日志服务器等地方。和配置系统一样,.NET Core中的日志提供了标准接口及官方的一些实现,同时允许开发人员编写第三方实现。些简单的把日志输出到控制台的使用方式。NuGet安装包日志系统核心的开发包 1Microsoft.Extensions.Logging 控制台输出日志包 1Microsoft.Extensions.Logging.Console 声明一个类 123456789101112131415161718192021222324252627class Recording{ private ILogger<Recording>logger; public Recording(ILogger<Recording> logger) { ...
学习XML
什么是XMLXML 指的是,可扩展性标记语言XML被发明的目的是传输和存储数据,而不是展示数据;XML的标签必须自定义,但是在写标签名的时候一定要有含义; XML是W3C推举的数据传输格式; 1234<root> <user>123</user> <msg>哈哈</msg></root> XML基本语法详解XML(Extensible Markup Language)是基于标签的语言,用于表示结构化的信息。它使用标签来定义、组织和引用数据,支持嵌套关系,使文档结构清晰明了。 以下是XML的基本语法及其组成部分: opening elementXML文件以一个特定的开始标签开头,通常为<root>,其中”root”是自定义的标签名称。根标签标识整个文档的开始,并且必须是一个有效且唯一的名字。 示例: 1234<?xml version="1.0"?><root> <!-- 内容 --></root> Tag...
.NET Core配置系统
配置系统.NET Core中提供了非常强大的配置系统以简化配置相关代码的编写方法。 配置系统的基本使用.NET Core中的配置系统支持非常丰富的配置源,包括文件(JSON、XML、INI等)、注册表、环境变量、命令行、Azure Key Vault等,配置系统还支持自定义配置源。.NET Core中读取配置有很多种方式,既可以通过IConfigurationRoot读取配置,也可以使用绑定的方式把配置读取为一个C#对象。 在项目根目录下添加一个JSON文件,命名为:config.json 因为程序在运行的时候默认加载EXE文件同文件夹下的配置文件,而不是项目中的config.json文件,所以我们需要把config.json文件设置为生成项目的时候自动被复制到生成目录。 .NET Core中配置系统的基础开发包是 1Microsoft.Extensions.Configuration, 而读取JSON文件的开发包是 1Microsoft.Extensions.Configuration.Json ,用NuGet安装这两个包。 1234567891011{ ...
依赖注入
依赖注入控制反转(inversion of control, IoC)是设计模式中非常重要的思想,而依赖注入(dependency iniection, DI)是控制反转思想的一种重要的实现方式。依赖注入简化了模块的组装过程,减小了模块之间的耦合性,因此.NET Core中大量应用了依赖注入的开发模式。 DI几个概念服务(service):对象;注册服务;服务容器:负责管理注册的服务;查询服务:创建对象及关联对象;对象生命周期:Transient(瞬态);Scoped(范围);Singleton(单例); 微软把内置.NET...
LINQ学习
LINQLINQ是.NET Core中提供的简化数据查询的技术。使用LINQ技术,可以用几行代码就实现复杂的数据查询。LINQ不仅可以对普通的.NET集合进行查询,而且在Entity Frameword Core中应用广泛,因此必须熟练掌握LINQ。 要想熟悉掌握LINQ就的熟悉掌握委托——>Lambda——>LINQ 委托的用法委托类型规定了方法的返回值和参数的类型 123456789101112131415MyDelegate d1 = SayEnglish;string s1 = d1(3);Console.WriteLine(s1); // Hello 3d1 = SayChinese;string s2 = d1(10);Console.WriteLine(s2); // 你好 10static string SayEnglish(int age){ return $"Hello {age}";}static string SayChinese(int age){ ...
异步编程学习笔记
为什么要使用异步编程性能优化: 主线程利用率:异步编程允许主线程持续运行多个任务,避免因子线程阻塞而降低性能。I/O密集型任务处理:异步编程特别适合处理大量I/O操作的任务,如文件读写、数据库查询等,这些操作可以独立于主线程运行,提升应用响应速度。可扩展性: 多处理器支持:异步编程能够充分利用多处理器资源,每个CPU核同时处理不同的任务,从而提高系统的性能和稳定性。高负载请求处理:在处理大量并发请求时,同步编程可能导致主线程被阻塞,而异步编程则能够有效地分担压力。现代Web开发趋势: 技术兼容性:与主流Web框架(如React、Vue)的集成更加顺畅,使用async/await关键字可以简化代码,提高开发效率。用户体验提升:异步编程通过延迟加载等技术减少用户等待时间,提升应用体验。资源利用效率: 多任务并行处理:主线程可以通过多线程或协 ordinates...
Web-API事件
事件监听理解事件监听的基本概念 事件监听是基于DOM节点的事件处理机制,允许在特定条件下触发用户自定义函数。学习事件监听的三要素 触发源:事件发生的原因或条件。例如,“click”事件表示按钮被点击。触发器:具体触发事件的那个DOM节点。例如,在document.getElementById(‘myButton’)中,’myButton’是触发器。监听操作者:响应特定事件的代码或函数。例如,绑定在“click”事件上的回调函数。实践实现事件监听 创建一个按钮元素并绑定事件监听: 1234const myButton = document.getElementById('myButton');myButton.addEventListener('click', function() { ...