.NET(C#)主流ORM总揽

SqlSugar (国内)

Dos.ORM (国内)

Chloe (国内)

StackExchange/Dapper (国外)

Entity Framework (EF) (国外)

NHibernate (国外)

ServiceStack/ServiceStack.OrmLite (国外)

linq2db (国外)

Massive (国外)

PetaPoco (国外)

SqlSugar

SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET CORE的高性能、轻量级 ORM框架,众多.NET框架中最容易使用的数据库访问技术。

特点:

开源、免费

国内开发者开发、维护;

支持.NET Core;

支持主流数据库,如:SQL Server,MySql,Oracle,Sqlite等;

维护更新及时

PetaPoco

PetaPoco:轻量的POCO对象和数据库映射的ORM框架。

特点:

开源、免费

linq2db

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

推荐等级:★★★★☆

Dos.ORM

Dos.ORM(原Hxj.Data)于2009年发布,2015年正式开源。在开发过程中参考了NBear与MySoft,吸取了他们的一些精华,加入新思想,同时参考EF的Lambda语法进行大量扩展。该组件已在数百个成熟项目中应用。官方网站:http://ITdos.com/Dos/ORM/Inde...

特点:

开源、免费

上手简单,0学习成本。使用方便,按照sql书写习惯编写C#.NET代码。功能强大

高性能,接近手写Sql

体积小(不到150kb,仅一个dll)

完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等数据库

支持大量Lambda表达式写法,国产ORM支持度最高,开源中国ORM排行前三

不需要像NHibernate的XML配置,不需要像EF的各种数据库连接驱动

遵循MIT开源协议,除不允许改名,其它随意定制修改

ServiceStack.OrmLite

ServiceStack.OrmLite的目标是提供一种方便,无干扰,无配置的RDBMS无关类型的封装,与SQL保持高度的契合,展现直观的API,可以生成可预测的SQL。

ServiceStack.OrmLite的宗旨:Fast, Simple, Typed ORM for .NET

特点:

开源、收费(免费版只支持单个库10张表)

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和事务,缓存等底层

Massive

Massive:小巧,动态的微ORM框架。

.NET(C#)主流ORM总揽SqlSugar (国内)Dos.ORM (国内)Chloe (国内)StackExchange/Dapper (国外)Entity Framework (EF) (国外)NHibernate (国外)ServiceStack/ServiceStack.OrmLite (国外)linq2db (国外)Massive (国外)PetaPoco (国外)SqlSugarSqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET CORE的高性能、轻量级 ORM框架,众多.NET框架中最容易使用的数据库访问技术。
特点:
开源、免费国内开发者开发、维护;支持.NET Core;支持主流数据库,如:SQL Server,MySql,Oracle,Sqlite等;维护更新及时
PetaPocoPetaPoco:轻量的POCO对象和数据库映射的ORM框架。
特点:
开源、免费
linq2dblinq2db也是一款快速、轻量、类型安全的POCO对象和数据库映射的ORM框架。从构架上来说,linq2db是对比如:Dapper、PetaPoco这个的微ORM的进一步封装,但它不像Entity Framework那样笨重。它没有实现状态跟踪,需要自己处理实体的状态更改等。
推荐等级:★★★★☆
Dos.ORMDos.ORM(原Hxj.Data)于2009年发布,2015年正式开源。在开发过程中参考了NBear与MySoft,吸取了他们的一些精华,加入新思想,同时参考EF的Lambda语法进行大量扩展。该组件已在数百个成熟项目中应用。官方网站:http://ITdos.com/Dos/ORM/Inde...
特点:
开源、免费上手简单,0学习成本。使用方便,按照sql书写习惯编写C#.NET代码。功能强大高性能,接近手写Sql体积小(不到150kb,仅一个dll)完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等数据库支持大量Lambda表达式写法,国产ORM支持度最高,开源中国ORM排行前三不需要像NHibernate的XML配置,不需要像EF的各种数据库连接驱动遵循MIT开源协议,除不允许改名,其它随意定制修改

ServiceStack.OrmLiteServiceStack.OrmLite的目标是提供一种方便,无干扰,无配置的RDBMS无关类型的封装,与SQL保持高度的契合,展现直观的API,可以生成可预测的SQL。ServiceStack.OrmLite的宗旨:Fast, Simple, Typed ORM for .NET
特点:
开源、收费(免费版只支持单个库10张表)

Entity Framework (EF)ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。该框架曾经为.NET Framework的一部分,但version 6之后从.NET Framework分离出来。

NHibernateNHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。
特点:
开源、免费批量写入批量读/多重查询特性(我理解是在说Future?)批量的集合加载带有lazy="extra"的集合集合过滤器和分页集合二级缓存(实际上NH的二级缓存貌似也很简单?)集成和扩展性代码自动生成,减少代码和sql的开发量,使开发人员摆脱开sql,ado.net和事务,缓存等底层

MassiveMassive:小巧,动态的微ORM框架。

什么是ORM
ORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。 为什么用ORM
在程序开发中,数据库保存的表,字段与程序中的实体类之间是没有关联的,在实现持久化时就比较不方便。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。这种方案存在以下不足: .持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口
.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度
ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁 ORM的方法论基于三个核心原则: 简单:以最基本的形式建模数据
传达性:数据库结构被任何人都能理解的语言文档化
精确性:基于数据模型创建正确标准化了的结构
本文以C#编程语言为例,在传统的数据读取操作中,我们以Ado.net的方式对数据库进行CRUD操作,使用的基本都是SQL硬编码,比如有以下数据库查询操作: String sql = "SELECT ... FROM persons WHERE id = 10";
DbCommand cmd = new DbCommand(connection, sql);
Result res = cmd.Execute();
String name = res[]["FIRST_NAME"];
使用了ORM映射的C#实现的伪代码: Person p = repository.GetPerson();
String name = p.getFirstName();
上面的示例代码表示我们可以从数据仓库repository中获取到一个实体对象,当然数据仓库中可能包含其他的方法,你也可以定义自己的ORM实现,比如: Person p = Person.Get();
通常,在处理ORM映射和数据仓库时会暴露一些过滤或者查询方法,允许客户端对数据集进行进一步的筛选等操作,比如代码演示从数据库中查询ID=10的用户: Person p = Person.Get(Person.Properties.Id == );
优/缺点
优点
与传统的数据库访问技术相比,ORM有以下优点: 开发效率更高
数据访问更抽象、轻便
支持面向对象封装
缺点
降低程序的执行效率
思维固定化
从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。 在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。 总结
作为一名编程人员,在ORM使用的观念上会有不同,具体取舍需根据具体的项目和场景

.NET(C#)主流的ORM框架的更多相关文章

  1. 目前的.NET(C#)世界里,主流的ORM框架

    推荐一些常用的asp.net ORM框架 SqlSugar (国内) Dos.ORM (国内) Chloe (国内) StackExchange/Dapper (国外) Entity Framewor ...

  2. .NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...

    前言 在以前的一篇文章中,为大家分享了<什么是ORM?为什么用ORM?浅析ORM的使用及利弊>.那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,SqlSugar,Dapper, ...

  3. [Android]Android端ORM框架——RapidORM(v1.0)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4748077.html  Android上主流的ORM框架有很多 ...

  4. 我的开发框架之ORM框架

    今天我想分享一下我自己的ORM框架,虽然谈不是很好,但我个人认为还是蛮好用的,跟大家分享交流一下. 首先说说我对现在主流的ORM框架的一些看法: 优点: 让程序员不再关注数据库细节,专心在业务逻辑上, ...

  5. 学习orm框架及一些看法

    首先说说我对现在主流的ORM框架的一些看法: 优点: 让程序员不再关注数据库细节,专心在业务逻辑上,程序员可以不懂数据库就可以开发系统. 让数据库迁移变的非常方便,如果系统需要更改使用的数据库,直接改 ...

  6. Mego(2) - NET主流ORM框架分析

    接上文我们测试了各个ORM框架的性能,大家可以很直观的看到各个ORM框架与原生的ADO.NET在境删改查的性能差异.这里和大家分享下我对ORM框架的理解及一些使用经验. ORM框架工作原理 典型ORM ...

  7. Mego(1) - NET中主流ORM框架性能对比

    从刚刚开始接触ORM到现在已有超过八年时间,用过了不少ORM框架也了解了不少ORM框架,看过N种关于ORM框架的相关资料与评论,各种言论让人很难选择.在ORM的众多问题中最突出的问题是关于性能方面的问 ...

  8. 目前的.NET 主流的后端ORM框架

    转自:https://www.cnblogs.com/yeminglong/p/9518438.html  推荐一些常用的asp.net ORM框架 SqlSugar (国内) Dos.ORM (国内 ...

  9. Android ORM 框架之 greenDAO 使用心得

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

随机推荐

  1. linux下设置opencv环境变量

    一.安装opencv(这里不再讲述) 二.添加库路径(创建opencv.conf文件) 输入命令:vi /etc/ld.so.conf.d/opencv.conf 输入/usr/local/lib,并 ...

  2. Windows内核分析——内核调试机制的实现(NtCreateDebugObject、DbgkpPostFakeProcessCreateMessages、DbgkpPostFakeThreadMessages分析)

    本文主要分析内核中与调试相关的几个内核函数. 首先是NtCreateDebugObject函数,用于创建一个内核调试对象,分析程序可知,其实只是一层对ObCreateObject的封装,并初始化一些结 ...

  3. Hadoop案例(八)辅助排序和二次排序案例(GroupingComparator)

    辅助排序和二次排序案例(GroupingComparator) 1.需求 有如下订单数据 订单id 商品id 成交金额 0000001 Pdt_01 222.8 0000001 Pdt_05 25.8 ...

  4. 【Spark亚太研究院系列丛书】Spark实战高手之路-第2章动手实战Scala第3小节:动手实战Scala函数式编程(2)

    3,动手实战Scala中的泛型 泛型泛型类和泛型方法,也就是我们实例化类或者调用方法的时候可以指定其类型,由于Scala的泛型和Java的泛型是一致的,这里不再赘述. 4,动手实战Scala中的隐式转 ...

  5. es6导入导出模块

    在JavaScript ES6中,export与export default均可用于导出常量.函数.文件.模块等,你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方 ...

  6. java.io.BufferedWriter API 以及源码解读

    下面是java se 7 API 对于java.io.BufferedWriter 继承关系的描述. BufferedWriter可以将文本写入字符流.它会将字符缓存,目的是提高写入字符的效率. bu ...

  7. JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含 ...

  8. React Native 系列(二)

    前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...

  9. Hibernate 组合主键映射

    在开发过程中创建数据库表时,有时候会发现单纯的创建一个主键是不可行的,有时候就需要多个字段联合保持唯一,本文讲述如何创建组合主键的映射. 例如:记录一个班的考试成绩.学生跟科目是多对多的关系,只有一个 ...

  10. 【BZOJ 4527】 4527: K-D-Sequence (线段树)

    4527: K-D-Sequence Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 145  Solved: 59 Description 我们称一个 ...