25

论ORM框架—EntityFrameworkCore

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA%3D%3D&%3Bmid=2654077889&%3Bidx=3&%3Bsn=fcabd46a0136da2db43889c74a6fed20
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

aEf6raJ.jpg!web

欢迎大家阅读《朝夕Net社区技术专刊》

我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!

01

PART

ORM框架

ORM(Object Relational Mapping)对象关系映射,是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。ORM其实即使以面向对象的思想来完成对数据库的操作;让更多的开发者降低了对数据库的学习成本,也正是因此,ORM框架是现在应用系统开发必须掌握的框架;

下图完整描述了ORM框架的特点:在面向对象语言程序中包含了OMR框架版块;通过对ORM的操作操作完成对数据库的增删改查。

ZnUzQbe.png!web

VBZvYfj.gif

现在业界常用的ORM有一下几种:

·         EntityFrameorkCore

·         Entityframework6

·         dapper

·         SqlSugar  (国内)

·         Dos.ORM  (国内)

·         Chloe  (国内)

·         StackExchange/Dapper  (国外)

·         Entity Framework (EF)  (国外)

·         NHibernate  (国外)

·         ServiceStack/ServiceStack.OrmLite  (国外)

·         linq2db  (国外)

·         Massive  (国外)

·         PetaPoco  (国外)

下面小编给大家介绍一下当前最流行的ORM--EntityFrameworkCore 框架的一些新特性

02

PART

EntityFrameworkCore3支持的新特性

Entity Framework (EF) Core 是轻量化、可扩展、 开源 和跨平台版的常用 Entity Framework 数据访问技术。EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。

Entity Framework (EF) Core支持了更多数据库,各个数据库分别对应的有各自的程序包:查询各个程序包对应支持的数据库引擎请查阅: https://docs.microsoft.com/zh-cn/ef/core/providers/?tabs=dotnet-core-cli

03

PART

EFCore3支持的新特点

1 、生成可执行文件

以前版本需要dotnet run运行项目,.net core 3支持直接生成目标平台的可执行文件。比如windows就是exe了,linux就+x了。

2 、生成依赖项的副本

以前版本在build时不会把NuGet的工具复制到目标目录,新版本会复制,但不包括razor和链接(链接的含义不太清楚)。

3 、本地工具

这个工具指NuGet的包,以前2.1支持全局的,新版本支持在目录里放置dotnet-tools.json清单文件,再使用dotnet tool restore命令重载。旧版本的工具依然依赖旧版本.net core SDK。

4 、支持WPF与Windows Froms

这个在很多国内新闻上已经介绍过了,事实上这些新闻只关注这一条。项目文件的Sdk设置为Microsoft.NET.Sdk.WindowsDesktop,添加<UseWPF>true</UseWPF>与或<UseWindowsForms>true</UseWindowsForms>即可添加支持。

5 、内建快速的JSON解析器

System.Text.Json.Utf8JsonReader,此物只向前读取(只进读取器),内存占用更少,常规性能是Newton JSON.net的二倍,这个很给力哦!应该会降低很多项目对Newton的依赖。

现在只有读取器,以后会有:JSON 写入、DOM(随机访问)、poco 序列化程序、poco 反序列化程序。

新推出的Span<T>对高性能的字符分析程序都有很大的好处,包括Kestrel也从中受益。(Kestrel是微软跨平台基于libuv的高性能web服务器,目前应该是最强,不过我还没有其与h2o的比较信息)

6 、索引和范围

这应该是吸纳百家之长的又一力作了,Python对索引的支持非常到位,现在.net也支持了(C#8.0才开始有)。

[1,2,3][0] // 1

[1,2,3][^1] // 输出3,反向索引

[1,2,3,4,5][1..^2] // 输出[2,3,4] 范围索引

7 、异步流

又一个新语言特性,也是要C#8.0支持。IAsyncEnumerable<T>, IEnumerable<T>的异步版本。异步枚举器,可以在await foreach中途yield return。建议正式版再使用,现在还有bug。

8 、类型:SequenceReader 序列读取器

配合前面提到的Span<T>,用于高效率,简单,低分配的读取分析文本,例如分割回车换行。

9、类型:MetadataLoadContext 元素据负载描述表

可以反射一些程序集的信息,但是不能执行程序集的Invoke。用于工具导向的软件,或者运行时激活某些功能的场景,用于释放程序集的文件锁或暂用内存之类的吧啦吧啦……

10、支持Linux 上的 TLS 1.3 和 OpenSSL 1.1.1

使用SslStream的地方,会自动搜寻Linux所安装的最新版本OpenSSL,尽可能使用TLS1.3。因为TLS1.3更快,步骤更少。而且在SSL在Linux上的特定版本还有漏洞……OpenSSL的漏洞。

11、AES-GCM 和 AES-CCM加密算法支持

System.Security.Cryptography.AesGcm,System.Security.Cryptography.AesCcm可用。均使用AEAD算法( Authenticated Encryption with Association Data (AEAD) algorithms )。

12、加密密钥的导入导出

不用X.509证书即可导入标准的RSA、DSA、ECDsa、ECDiffieHellman公钥证书,与PKCS#8私钥证书。

13、Linux上支持串口

这个不懂,就是以前只有Windows支持,现在Linux也可以了。

14、优化了很多现有功能

字符串在字典中做key也会更高效,HttpClient支持无损压缩Brotli,很多都是不需要修改代码就可受益。

15、分层编译

.net core 2.1新功能,2.2预览版默认启动,2.2正式时改为可选,现在3.0默认开启……曲折。

这货可提高启动性能,更好的JIT性能,提高吞吐量。

EFCore3对应的新特性功能,配合在C#8开发,在应用系统中,使用起来更加便捷,也更加轻量级,让系统从性能,扩展性、伸缩性等各个方面都能得到质的提升。

b2Q7ryq.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK