说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据。在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的ORM持怀疑态度,你还可以使用来自微软的实现、根正苗红的Linq或者EntityFramework。
大部分从早期就开始使用.NET开发的程序员可能对ADO.NET有种迷恋,使用ADO.NET可以充分将我们早期的SQL知识发挥得淋漓尽致,并且出于对性能的考虑,有些人对.NET中的ORM还保持一种观望态度,包括我自己也是这种态度。不过即使在实际开发中不用,并不代表我们不能去了解和比较这些技术,任何事物的出现和消亡总有其原因的,我们可以了解它们的优点和长处。所以本人抽出了几个周末的时间分别用ADO.NET、NHibernate、Linq和EntityFramework来实现对数据库单表数据的创建、读取、更新和删除操作,也就是所谓的CRUD(C:Create/R:Read/U:Update/D:Delete)。
通过实现相同功能的比较,大家自己判断那种方式更适合自己。需要说明的是,如果在VS2008中使用EntityFramework就需要安装VS2008SP1。
在开始演示之前先准备好数据,在本系列中所使用的数据库是SQL Server2005,创建和初始化数据库数据的代码如下:
/****** 对象: Table [dbo].[UserInfo] 脚本日期: 03/08/2010 12:20:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[UserInfo]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[UserInfo](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[RealName] [nvarchar](8) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Age] [tinyint] NOT NULL,
[Sex] [bit] NOT NULL,
[Mobile] [char](11) COLLATE Chinese_PRC_CI_AS NULL,
[Phone] [char](11) COLLATE Chinese_PRC_CI_AS NULL,
[Email] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[UserInfo]') AND name = N'IX_UserName')
CREATE UNIQUE NONCLUSTERED INDEX [IX_UserName] ON [dbo].[UserInfo]
(
[UserName] ASC
)WITH (IGNORE_DUP_KEY = ON)
GO
SET IDENTITY_INSERT [dbo].[UserInfo] ON
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (1, N'zhangfei', N'测试859', 36, 1, N'13455663420', N'03517890360', N'zhangfei@msn.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (2, N'asddf', N'测试80', 38, 1, N'13455663421', N'03517890361', N'guanyu@163.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (3, N'liubei', N'刘备', 42, 1, N'13455663422', N'03517890362', N'liubei@163.net')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (4, N'zhougong', N'周公', 29, 1, N'13455663423', N'03517890363', N'zhoufoxcn@tom.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (5, N'zhaoyun', N'赵云', 32, 1, N'13455663424', N'03517890364', N'zhaoyun@sohu.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (6, N'huanggai', N'黄盖', 50, 1, N'13455663425', N'03517890365', N'huanggai@live.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (7, N'zhugeliang', N'诸葛亮', 27, 1, N'13455663426', N'03517890366', N'zhugeliang@hotmail.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (8, N'jiangwei', N'姜维', 22, 1, N'13455663427', N'03517890367', N'jiangwei@netease.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (9, N'caocao', N'曹操', 48, 1, N'13455663428', N'03517890368', N'caocao@qq.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (10, N'guojia', N'郭嘉', 32, 1, N'13455663429', N'03517890369', N'guojia@21cn.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (11, N'sunquan', N'孙权', 33, 1, N'13455663430', N'03517890370', N'sunquan@gmail.com')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (12, N'diaochan', N'貂禅', 20, 0, N'13455663431', N'03517890371', N'diaochan@sina.com.cn')
INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (13, N'yangyuhuan', N'杨玉环', 24, 0, N'13455663432', N'03517890372', N'yangyuhuang@chinaren.com')
SET IDENTITY_INSERT [dbo].[UserInfo] OFF
下面开始演示如何使用ADO.NET实现CRUD功能。
一、配置
创建一个控制台或者类库项目,并且添加一个app.config配置文件,在此文件中添加数据库配置信息,如下:
二、创建实体类
三、创建数据库访问通用类
说明:下面的这个数据库通用类适用于访问数据库中任意表,不管是基于文本方式SQL、参数化SQL语句或者存储过程都可以。
四、创建CRUD类
对数据库实现增删改查功能的类的代码如下:
五、NUnit单元测试代码
在进行单元测试时没有使用VS自带的单元测试工具,仍是我平常用惯了的NUnit,下面是代码:
六、点评
在使用ADO.NET操作数据库时个人觉得有如下优点,可以随心所欲地使用熟知的SQL语句甚至是存储过程,在使用统计、分组功能时感觉尤其强烈,当然前提是你的SQL基础要相当好,此外它是其它几种ORM的基础,其它几种ORM都是在底层使用ADO.NET实现与数据库的交互的,所以在效率上来说它也要高一些。它的缺点是需要自己写操作数据的语句并且需要自己编写数据库记录到实体的映射转换代码,一旦表的结构发生变动,就需要修改实体类和映射转换代码。
2010/03/08
周公
分享到:
相关推荐
fohu.EntitySharp:一个封装了ADO.NET的轻量级的开发框架,轻量级中的轻量级的.NET ORM开发框架,虽然轻量级依然不忘集成数据检验组件
sheng.ADO.NET.Plus请访问原版代码库,以获得最新更新: MIT 协议开源,可以随意使用,但是需在源代码和产品关于画面保留版权声明和我的网站链接,谢谢。sheng.ADO.NET.Plus 是一个介于 Entity Framework 和直接使用 ...
fohu.EntitySharp:一个轻量级中的轻量级的.NET ORM开发框架,虽然轻量级依然不忘实体的扩展属性和集成数据检验组件
ORM框架EF Core、FreeSql、SqlSuger对比
本文档主要介绍.NET开发中两项新技术,.NET平台语言中的语言集成查询技术 LINQ,与ADO.NET 中新增的数据访问层设计技术ADO.NET Entity Framework。ADO.NET的LINQ to Entity部分以LINQ 为基础,为了完整...
ORM框架 C#.NET ORM框架ORM框架 C#.NET ORM框架ORM框架 C#.NET ORM框架ORM框架 C#.NET ORM框架
通过范型,反射,扩展方法,自定义属性 将底层的aso.net数据库访问方法进行封装可以轻松实现复杂查询,增,删 ,改等操作。
基于ORM模式开发的.NET框架,可在框架内自由添加想要的功能
Farseer.net原是在Qyn.Studio V5.0 框架更名而来。 该框架是基于.net framework 4.0 的基础下设计的。所以朋友们,需看下自己的实际情况来决定是否使用。 Farseer.net的前身已经历过7次大改版的升级。 Farseer.net...
ADO.NET EntityFramework入门教程,分别讲解Storage Provider ,Mapping Layer ,Object Services,LINQ to Entities 四层如何设计使用
[幻影粒子系统].particleIllusion3_CN_33de9.net(ORM)
ADO.NET Micro-ORM到SQL Server。 首先,人们希望保存一个对象图以便一次访问数据库: 客户端上的一条命令, 一个向应用程序服务器的请求, 一种访问数据库。 从而找到了一种的方法。 然后,人们希望对对象...
第三篇:FluentData轻量级.NET-ORM持久化技术详解.pdf
第三篇:FluentData轻量级.NET-ORM持久化技术详解.doc
Grove——.NET中的ORM实现 Grove——.NET中的ORM实现
简单讲述orm使用,对于学习orm的很有帮助。
通过一个人员管理小程序详细介绍了Asp.net中ORM(Object Relational Mapping)的应用,详细说明请参照代码佩文 <br>采用了DAL、BLL、Model多层模式 该代码实现了数据的添加、修改、删除和查询 <br>...
这是一个餐馆菜品订购系统,前端用的是原生的html+css,框架用的是asp.net mvc5,数据库的访问使用了两种方式来实现,第一种是原生的ado.net,第二种是Orm框架,entityframework5来实现,这是我从网上收集而来的,...
AutoMapper是基于对象到对象约定的映射工具,常用于(但并不仅限制于...然而,在某些特定环境中,有人可能会为双向映射辩解,比如:非常简单的CRUD应用程序。一个支持双向映射的框架就是Glue。 标签:.net