Entity Framework Core(简称 EF Core)是 .NET Core 中的 ORM(object relational mapping,对象关系映射)框架,它可以让开发人员以面向对象的方式进行数据库操作,
从而大大提升开发效率。
EF Core概述
作为一款微软官方的ORM框架,EF Core有很多优点,当然也有一些缺点。
任何一个技术都是优缺点并存,不存在完美的框架。
如果在不适合EF Core的地方使用它,就可能会适得其反。
1. 什么是ORM
ORM(object relational mapping,对象关系映射)中的”对象”指的就是C#中的对象,而”关系”指的是关系型数据库,”映射”指的是在关系数据库和C#对象之间搭建一座”桥梁”。
我们知道,在.NET中可以通过ADO.NET连接数据库然后执行SQL语句来操作数据库中的数据。
而ORM可以让我们通过操作C#对象的方式操作数据库,比如使用ORM,可以通过创建C#对象的方式把数据插入数据库,而不需要编写Insert语句。
再比如,使用ORM,我们可以为对象的属性赋值,完成数据库数据的更新,而不需要编写Update语句。
提示:
ORM只是对ADO.NET的封装,ORM底层仍然是通过ADO.NET访问数据库的
EF Core是微软官方提供的ORM框架。
EF Core不仅可以操作Microsoft SQL Server、MySQL、Oracle、PostgreSQL等数据库,而且可以操作Azure Cosmos DB等NoSQL数据库。
除了EF Core之外,.NET Core中还有Dapper、NHibernate Core、PetaPoco、SQL Sugar等ORM框架。
因为EF Core 是微软官方出品的,而且EF Core体现的是面向模型的编程方式,更加先进,所以EF Core的市场占有率比较高。
2. EF Core性能怎么样
在技术社区中,有一部分开发人员给EF Core的评价是”EF Core的性能太差了”,那么EF Core的性能到底怎么样呢?
Dapper属于轻量级ORM,很多操作都需要开发人员手写SQL语句来完成,由于SQL语句是由开发人员控制的,因此代码的性能不会很差;
EF Core则是把对C#对象的操作转换为SQL语句,由于SQL语句是自动生成的,因此如果使用不当的话,EF Core就可能会产生低性能的数据库操作。
这其实就是很多人认为”EF Core性能差”的原因。
但是这样的认知是错误的,因为如果开发人员对EF Core有深入了解的话,也是可以写出性能非常高的代码的,而且EF Core也提供了性能优化的相关功能,可以帮助开发人员对程序进行性能优化。
EF Core中也可以直接执行SQL语句,这样在一些性能瓶颈环节,我们仍然可以直接编写优化后的SQL语句。
EF Core和Dapper之类的框架也不是互斥的,在一个项目中它们两者是可以共存的,在适合的场景用不同的ORM即可。
非常重要的一点是,我们使用EF Core进行开发的效率是非常高的,比手写SQL语句能更快地完成代码的编写。
在进行系统开发的时候,程序的运行效率并不是唯一的考量因素,我们需要考虑性能、开发效率、可维护性等多个维度的因素。
使用EF Core可以帮助开发人员更快地完成项目,这就是非常大的优势;
对于性能瓶颈环节,开发人员可以再使用EF Core进行优化;
对于使用EF Core优化后性能还较差的环节,开发人员还可以把EF Core代码改为直接改为直接执行SQL语句。