.NET 中的数据访问
这一部分介绍.NET中不同的数据访问层的使用方式,由 此得出Entity Framework在一个.NET系统中的应用及其在原有设计基础上的改变。从大的方面来看数据访问的设计方案基本有如下几类:
- DataSet
- 手写代码通过ADO.NET2.0 连接类与数据库交互
- ORM 组件
DataSet 方案
如图所示,DataSet 与数据源之间通过DataAdapter 连接,逻辑中直接访问DataSet 获取数据,或是通过ADO.NET2.0 的非连接类,或者通过强类型DataSet 以一种类型安全的方式访问数据。
缺点逻辑代码与数据访问代码耦合高。
改进的的 DataSet 方案
这种设计方式将业务所需的实体抽象出来,并把对DataSet 的操作封装在其中,这样一定程序上解除业务 逻辑与数据访问间的耦合。
手写代码通过 ADO.NET2.0 连接类与数据库交互
这种方式是我使用的最多的一种方式,其可以提供最大的控制能力,且效率最高,唯一的不足是当业务变化时修改数据访问代码的工作量比较大,通过代码生成器也能一定程度上解决这个问题
ORM – LINQ to SQL
在.NET 平台下ORM 的解决方案有不少,本文只讨论两个微软官方的解决方案。先是LINQ to SQL 技术。LINQ to SQL 是一个将不再更新的技术。其有很多不足之处,如,不能灵活的定义对象模型与数据表之间的映射、无法扩展提供程序只能支持SQL Server 等。
这样数据访问层的设计如下所示:
ORM – ADO.NET Entity Framework
作为下一代数据访问的技术领导者。Entity Framework 的设计很多地方都保留了高扩展性。其最重要的一 个改进在于其映射定义的灵活性。先来看下图:
由图可以看出,使用Entity Framework 可以充分的定义与数据库表映射的实体,并将这个实体直接用于业 务逻辑层或作为服务的数据契约。实体设计较其他技术的优势体现在以下几方面:
创建ComplexType(CSDL 部分有讨论)
EntitySet 的继承
使用Entity Framework 后,可以将实体类的设计工作完全放在EDM 的设计过程中,而不再需要手工写一些大同小异的代码,并且对这个实体模型(包含于EDM 中)可以在运行时修改并生效。另外,开发人员与数据库直接打交道的次数将大大减少,大部分时间开发人员只需操作实体模型,框架会自动完成对数据库的操作。