目前.NET(C#)中比较流行的ORM框架:

SqlSugar (国内)

Dos.ORM (国内)

Chloe (国内)

StackExchange/Dapper (国外)

Entity Framework (EF) (国外)

NHibernate (国外)

ServiceStack/ServiceStack.OrmLite (国外)

linq2db (国外)

Massive (国外)

PetaPoco (国外)

Dapper

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

什么是ORM

ORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。  能够更好的将数据库里面的元数据和程序里面的对象匹配

为什么用ORM

在程序开发中,数据库保存的表,字段与程序中的实体类之间是没有关联的,在实现持久化时就比较不方便。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。这种方案存在以下不足:

1.持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口

2.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度

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[0]["FIRST_NAME"];

使用了ORM映射的C#实现的伪代码:

Person p = repository.GetPerson(10);

String name = p.getFirstName();

上面的示例代码表示我们可以从数据仓库repository中获取到一个实体对象,当然数据仓库中可能包含其他的方法,你也可以定义自己的ORM实现,比如:

Person p = Person.Get(10);

通常,在处理ORM映射和数据仓库时会暴露一些过滤或者查询方法,允许客户端对数据集进行进一步的筛选等操作,比如代码演示从数据库中查询ID=10的用户:

Person p = Person.Get(Person.Properties.Id == 10);

优/缺点:

优点

与传统的数据库访问技术相比,ORM有以下优点:

开发效率更高

数据访问更抽象、轻便

支持面向对象封装

缺点

降低程序的执行效率

思维固定化

从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。

在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。

转载:https://www.cnblogs.com/NET6/p/16154220.html

最新文章

  1. ORA-02020 : 过多的数据库链接在使用中-Windows环境解决步骤
  2. 知方可补不足~Sqlserver发布订阅与sql事务的关系
  3. code vs 1026 逃跑的拉尔夫
  4. javascript的事件
  5. servlet servlet基本概念和helloservlet实例
  6. Codeforces 264B 数论+DP
  7. rabbitmq 消息持久化之receive and send
  8. cocos2d-x 3.1.1 学习笔记[4]GridActions 网格动画
  9. 记录项目中用的laypage分页代码
  10. Host 'xxx' is not allowed to connect to this MySQL server.
  11. JS中的instanceof和typeof,以及特殊引用类型
  12. JS入门经典第二章总结
  13. yum问题解决
  14. Cotex-M4简介
  15. Scala进阶之路-Scala中的高级类型
  16. 安装NVIDIA驱动时禁用自带nouveau驱动
  17. Codeforce 733B - Parade (枚举)
  18. 必须熟练掌握的150个Linux命令
  19. [UGUI]帧动画
  20. SpringMVC -- 梗概--源码--壹--springMVC json处理

热门文章

  1. python常量与变量的本质
  2. 使用SSH连接Windows Server
  3. Openstack Neutron : LBaaS v2
  4. Keepalived+HAProxy 搭建高可用负载均衡
  5. 在k8s中部署前后端分离项目进行访问的两种配置方式
  6. Docker — 从入门到实践(v1.2.0)
  7. Prometheus与服务发现
  8. 3.在 Kubernetes 上安装 Gitlab CI Runner
  9. Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能
  10. Centos7下的基本操作