EF Core原理揭秘
EF Core优化之AsNoTrackingEF Core默认会对通过上下文查询出来的所有实体类进行跟踪,以便于在执行SaveChanges的时候把实体类的改变同步到数据库中。上下文不仅会跟踪对象的状态改变,还会通过快照的方式记录实体类的原始值,这是比较消耗资源的。因此,如果开发人员能够确认通过上下文查询出来的对象只是用来展示,不会发生状态改变,那么可以使用AsNoTracking方法告诉IQueryable在查询的时候“禁用跟踪”。
EF Core原理揭秘
EF Core原理揭秘既生IEnumerable,何生IQueryable可以使用LINQ中的Where等方法对普通集合进行处理。比如下面的C#代码可以把int数组中大于10的数据取出来。 12int[] nums={3,5,933,2,69,69,11};IEnumerable<int> items=nums.Where(n=>n>10); Where方法中,转到定义下,可以看到,这里调用的Where方法是Enumerable类中的扩展方法。 1IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source,Func<TSoure,bool> predicate); 也可以在EF Core的DbSet类型上调用Where之类的方法进行数据的筛选。 1IQueryable<Book>...
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){ ...