陈斌彬的技术博客

Stay foolish,stay hungry

NET 中的数据访问

.NET 中的数据访问

这一部分介绍.NET中不同的数据访问层的使用方式,由 此得出Entity Framework在一个.NET系统中的应用及其在原有设计基础上的改变。从大的方面来看数据访问的设计方案基本有如下几类:

  • DataSet
  • 手写代码通过ADO.NET2.0 连接类与数据库交互
  • ORM 组件

DataSet 方案

img

如图所示,DataSet 与数据源之间通过DataAdapter 连接,逻辑中直接访问DataSet 获取数据,或是通过ADO.NET2.0 的非连接类,或者通过强类型DataSet 以一种类型安全的方式访问数据。

缺点逻辑代码与数据访问代码耦合高。

改进的的 DataSet 方案

img

这种设计方式将业务所需的实体抽象出来,并把对DataSet 的操作封装在其中,这样一定程序上解除业务 逻辑与数据访问间的耦合。

手写代码通过 ADO.NET2.0 连接类与数据库交互

这种方式是我使用的最多的一种方式,其可以提供最大的控制能力,且效率最高,唯一的不足是当业务变化时修改数据访问代码的工作量比较大,通过代码生成器也能一定程度上解决这个问题

ORM – LINQ to SQL

在.NET 平台下ORM 的解决方案有不少,本文只讨论两个微软官方的解决方案。先是LINQ to SQL 技术。LINQ to SQL 是一个将不再更新的技术。其有很多不足之处,如,不能灵活的定义对象模型与数据表之间的映射、无法扩展提供程序只能支持SQL Server 等。

这样数据访问层的设计如下所示:

img

ORM – ADO.NET Entity Framework

作为下一代数据访问的技术领导者。Entity Framework 的设计很多地方都保留了高扩展性。其最重要的一 个改进在于其映射定义的灵活性。先来看下图:

img

由图可以看出,使用Entity Framework 可以充分的定义与数据库表映射的实体,并将这个实体直接用于业 务逻辑层或作为服务的数据契约。实体设计较其他技术的优势体现在以下几方面:

  • 创建ComplexType(CSDL 部分有讨论)

  • EntitySet 的继承

使用Entity Framework 后,可以将实体类的设计工作完全放在EDM 的设计过程中,而不再需要手工写一些大同小异的代码,并且对这个实体模型(包含于EDM 中)可以在运行时修改并生效。另外,开发人员与数据库直接打交道的次数将大大减少,大部分时间开发人员只需操作实体模型,框架会自动完成对数据库的操作。