20180117学习笔记

什么是ORM?

几乎所有的商业软件都要存储数据,多年来,Relational Database Management System(RDBMS)一直是开发者寻求的数据存储。ORM是允许开发者使用面向对象的编程语言访问RDBMS数据的一系列技术。可用的RDBMS包括SQL Server, Oracle, DB2, MySQL等等。这些数据库系统有一些共性。每个数据库系统都支持一个或多个数据库。数据库都包含数据表,每个表都以表格的形式存储数据,并且被分成了列和行。多个表中的数据行可能相互关联。比如,一个订单Order表中的Id可能存储在一个流水表Transaction中。

过去,在像EF这样的工具出现之前,开发者都是在软件代码内部嵌套的sql语句,这是因为编程语言不能原生理解Sql。比如,要从数据库中检索数据,然后将结果作为对象操作,必须使用ADO.NET要写相当数量的代码才行。具体来说,先定义一个存储person的类,然后打开数据库连接,创建具有查询文本的命令,再执行该命令的reader,然后对该reader的结果进行迭代,最后再使用来自reader的数据填充Person类的实例。你会看到,这里包含了很多步骤,而且更重要的是,这样写的代码维护成本很高。比如,数据库中改了一个列名,这样还要去代码中进行相应更改,否则运行时就会抛出异常。此外,我们数据库中存储的是标量值数据(int,string等),但我们的目标是一个对象或者对象图。这样看来,这种访问数据的方式有很多问题。

首先,RDBMS的列类型和.Net类型之间有类型失配;其次,存储和目标之间也不匹配,前者是标量值的集合,后者是具有属性的对象。更糟糕的是,键入我们的person对象有一个更复杂的属性List Phones,该属性代表其他表的集合。这些问题在OOP和关系数据库中被称为“阻抗失配”(impedance mismatch)。

ORM这些工具出现的原因就是为了解决这种失配问题。ORM工具将存储在数据表中的数据表示为对象,这比起传统的代码有很多优势:
它们使用原生.net类型暴露数据,使用简单的属性暴露相关的数据,提供编译时检查。

比如微软的EF(Entity Framework)

使用MySQLDataAdapter.fill直接把查询结果返回到DataTable

DataSet 对应 MySQL里的数据库
DataTable 对应 表
DataRow 对应 一条记录

vs里的github扩展还真是好用,体验和易用度不知道比终端版高到哪里去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值