ORM框架的选择

920 阅读3分钟

我正在参加「掘金·启航计划」

SqlSugar

SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET CORE的高性能、轻量级 ORM框架,众多.NET框架中最容易使用的数据库访问技术。 具有超越Dapper的性能 ,走的是EMIT结构中间语言动态编译到程序集,完成高性能的实体绑定,达到原生水平 但是它有一个问题就是并发高的时候会出现锁表的情况,不知道是不是设计上有问题,还是我使用上有问题

特点:

  • 开源、免费
  • 国内开发者开发、维护;
  • 支持.NET Core;
  • 支持主流数据库,如:SQL Server,MySql,Oracle,Sqlite等;
  • 维护更新及时

这里有它的详细介绍:传送门

PetaPoco

PetaPoco是一款适用于.NET应用程序的轻型对象关系映射器(ORM, Object Relational Mapper)。与那些功能完备的ORM(如NHibernate或Entity Framework)不同的是,PetaPoco更注重易用性和性能,而非丰富的功能。使用PetaPoco只需要引入一个C#文件,可以使用强类型的 POCO(Plain Old CLR Object),并支持使用T4模板生成的类等等 性能不如dapper,但仅次于他

特点:

  • 开源、免费

  • 可与SQL Server、SQL Server CE、MySQL、PostgreSQL以及Oracle数据库协同工作。

  • 包含针对Insert/Delete/Update/Save以及IsNew的多个辅助方法。

  • 支持简单事务

  • 对于翻页请求会自动计算总记录数,并获取特定分页。

  • 支持参数替换,能够从对象属性中抓取命名参数(named parameters)

  • 包括一个消耗资源很少的SQL Builder类

  • 部分记录更新

  • 包括T4 Templates,可以用于基于数据库结构生成POCO类。

linq2db

linq2db也是一款快速、轻量、类型安全的POCO对象和数据库映射的ORM框架。从构架上来说,linq2db是对比如:Dapper、PetaPoco这个的微ORM的进一步封装,但它不像Entity Framework那样笨重。它没有实现状态跟踪,需要自己处理实体的状态更改等。

EF

ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。该框架曾经为.NET Framework的一部分,但version 6之后从.NET Framework分离出来。 适合处理大数据。在查询需要多表查询可以选择它,但是它比较笨重。

NHibernate

NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

特点:

  • 开源、免费
  • 批量写入
  • 批量读/多重查询特性(我理解是在说Future?)
  • 批量的集合加载
  • 带有lazy="extra"的集合
  • 集合过滤器和分页集合
  • 二级缓存(实际上NH的二级缓存貌似也很简单?)
  • 集成和扩展性
  • 代码自动生成,减少代码和sql的开发量,使开发人员摆脱开sql,ado.net和事务,缓存等底层

Dapper

Dapper是一个轻量级的O/R框架,性能强劲,支持原生sql与模型对象混合写法,并且是半自动的,通过DapperExtension插件可以实现纯模型的操作(零Sql)语句,但是处理多表联查时性能不如EF,毕竟EF是微软的亲儿子。 特点:

  • 轻量。只有一个文件(SqlMapper.cs),编译完成之后只有120k(好象是变胖了)
  • 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
  • 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, - MySQL, PostgreSQL and SQL Server
  • 可以映射一对一,一对多,多对多等多种关系。
  • 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
  • 支持FrameWork2.0,3.0,3.5,4.0,4.5