ORM框架EF和Dapper如何选型,他们都有哪些优缺点

EF和Dapper都是ORM框架,那什么是ORM呢?

ORM的全称是Object Relational Mapping,即对象关系映射.EF和Dapper他们的共同作用,都是将关系型数据库中的表的数据,映射成为对象.这样,开发人员就可以把对数据库的操作转化为对这些对象的操作.

因此他们共同目的就是:为了方便开发人员,以面向对象的思想来实现对数据库的操作.

那他们又有什么优缺点呢?我们实际的软件开发过程中,应该如何选型呢?

EF:重量级ORM的代表

优点:

  1. 面向对象的方式操作数据库.
  2. 能够摆脱SQL,完全不用关心SQL怎么写,可移植性强.
  3. EF支持和适配了所有流行的关系型数据库,并且是面向接口的设计,并对事物,缓存(一级缓存)有良好的封装及配置.
  4. 支持code first.开发人员,可以完成不用关心数据库,代码先行,极大的节约开发成本.
  5. 开发效率非常高,结合LINQ,开发速度极快.
  6. 可以跨数据库,只需要在配置文件中修改连接字符串就能轻松支持.
  7. 与VS结果的比较好.

缺点:

  1. 比较复杂,学习曲线打;
  2. 不适合统计查询系统(或用于统计查询,效率不是很高);
  3. 对于多表联查,一些复杂的查询实现比较复杂和困难,而且有可能要借助其他方案来实现.
  4. 自动生成的SQL查询效率略低(效率低,是数据量达到一定量级,比较才明显).
  5. 对于大量数据,高负载场景需要慎重使用.
  6. 实现良好的二级缓存很困难,并且只能定制.
  7. EF的Context上下文不是线程安全的,开发人员切记不应该在整个Service上使用一个Context上下文.
  8. EF的性能表现比较一般.性能不如ADO,无法控制SQL语句的生成,频繁的插入操作(insert)不适用,EF不支持大数据Bulk插入.

Dapper:轻量级ORM的代表

优点:

  1. 开源,轻巧,单文件,代码就一个SqlMapper.cs文件,编译后就40K的一个小dll.上手容易.
  2. 支持主流的关系型数据库,如SQLserver,MySql,Oracle等.
  3. 执行的效率高,Dapper的速度和原生的IDataReader接近,取列表的数据甚至超过了DataTable.Dapper的原理通过Emit反射IDataReader的序列队列,来快速得到和产生对象.

缺点:

  1. 半自动的ORM,需要开发人员,自己写实体类.
  2. 开发的时间成本高,较弱的LINQ支持.
  3. 维护成本高,不支持code First,开发人员,除了维护好数据库中的表,还得维护好代码中表的映射对象.

 

你可能感兴趣的:(ORM选型,ORM)