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