没有合适的资源?快使用搜索试试~ 我知道了~
首页使用 LINQ To SQL 和Entity Framework实现灵活的数据访问
资源详情
资源评论
资源推荐
已面向开发人员发布了两种旨在减少关系数据领域和面向对象的编程之间的阻抗
失谐的产品:和 。借助其中任何一种产品,您
不必编写大部分探测代码,即可实现对象持久性。
本文使用以下技术:
、 和
迄今为止,已面向开发人员发布了两种旨在减少关系数据领域和面向对象的
编程之间的阻抗失谐的产品:和 。借助其中任
何一种产品,您不必编写大部分探测代码,即可实现对象持久性。但是,将这些对象关系
映射 技术应用到面向服务的应用程序体系结构为应用程序开发人员带来了全新的
挑战。
例如,如何创建将对象持久性与应用程序其他部分分离的数据访问层 ,以便在
需要时使用一个 提供程序换出另一个提供程序。如何在客户端没有安装
或 的情况下跟踪对实体的更改?如何通过仅调用服务一次即可在单
个事务中插入、更新和删除多个实体?
在本文中,我将进行简要介绍并提供一些有关如何解决上述问题的建议。首先,我将基于
!示例数据库创建一个用于处理订单的 。的两种实现(一种使用
,一种使用 )依赖于一个接口(请参见图 ")。和
都具有基于数据库架构生成实体的工具,但是 并不使用这些实体,
而是仅公开通常忽略涉及到持久性的数据传输对象 。
图 "适用于订单处理应用程序的面向服务的体系结构
和 使用不同的方法持久化断开连接的实体,具体取决于要
创建新实体还是更新现有的实体。因此,为了调用合适的 #,您必须事先了解实体的状
态。例如,如果您具有 $%!!方法接受带有订单明细的订单,可以为 $%!!
方法添加三个参数,以接受创建、更新和删除的订单明细。但这很容易因探测订单明细而
使方法签名变得混乱。
此外,您可以带外传递更改状态信息(例如在 #或 &#标头中传递),但这样
做会使更改跟踪与通信协议相结合。下面我将介绍另一种方法 — 将更改状态作为每个实
体的数据约定的一部分,我建议使用这种方法:
'()
%*+,*-
.
'*+)
$ -!/
'*+)
(!/
'*+)
$%!!/
'*+)
,!
0
除了其他属性之外,每个 都有一个使用 -枚举的 -属性。双
方只需同意此数据约定即可。
虽然我为每个 添加了 -属性,但我还必须依赖没有安装
或 的客户端来跟踪创建、更新或删除的对象,以及将
-属性设置为相应的值(请参见图 ")。我创建了一个通用更改跟踪集合来执
行此任务。此集合有两种类型:一种扩展 +1+,(,,23以用于 4!
#*!4#应用程序;一种扩展 5!-23以用于 4!窗
体应用程序。每种集合都可在从集合中删除项目之前缓存删除的项目,并且每种集合都具
有 6( -方法,该方法只返回插入、更新或删除的项目。
创建数据访问层
有助于将应用程序的其他部分与对象持久性的详细信息隔离开。为此,通过 公
开的对象必须排除任何特定数据访问技术的其余部分。和
允许您使用命令行工具和 7*,*!设计器创建实体,但是这些代码生成的实体中的一
些项目与它们的源相悖。
例如,为了支持关联对象的延迟加载,使用 23和
23集合类型表示数据关系,而 使用 23和
(,,23表示导航属性。此外,这些实体添加了旨在支持客户端服务器方案
(例如使用局部方法的验证和使用 #%( -!的数据绑定)的代码元素,如
果这些实体只用于与 4!(**!4(服务进行通信,则无需
使用这些代码元素。
由于 和 支持使用 (,8对实体进行
序列化(使用 (和 +属性进行标记),因此您可能希望将它们用
于您的服务操作中,而无论这样做会带来多大的负担。毕竟,当您设置 4(服务引用时,
集合类型(如 和 使用的集合类型)在客户端上显示为简单
数组。
但是,如果您将 (9的 ,8!从“:设置为
“$!,:,则只有一对多关系中的“多”方标有 +属性。这表示如果您的
!实体有 (*和 !;,两个属性,只有 !;,标有
+并包含在数据约定中,而 (*则不能如此。另一方面,
包含的字段可能比您希望包含在数据约定中的要多,从而在客户端上生成用以
实现特定于 的功能的类,例如,
<、<+、+=或 。
鉴于上述原因,您应该避免通过 公开 或 工具生成的
实体,改为返回简单的 ,它们存在的目的只是跨服务边界传送数据。例如,!
(请参见图 >)只包含属性,不包括方法。所有的 均在 +=命
名空间中定义,以与工具生成的同名类进行区分。
图 >表示 !中的订单的
%+=
.
'()
%*+,,!
.
'+)
%*+,!.-??0
'+)
%*+,-(*.-??0
'+)
%*+,-(*.-??0
'+)
%*+,@!.-??0
'+)
%*+,2!,3!,.-??0
'+)
%*+,+')$%!!.-??0
'+)
%*+,--.-??0
0
0
灵活的 应该可以使 !1不受基础持久性技术更改的影响。例如,假设
您选择使用 1来存储数据并且您的对象模型和数据库架构极其类似,因此,您
决定使用 持久化对象。但是,当您编写 持久性逻辑后不久,
您决定使用其他数据库系统(如 ,)或希望使用 的映射功能来分离
概念架构和逻辑架构。或许一种新的数据访问技术已推出,您希望使用该技术。如果您设
计了基于插件体系结构的灵活 ,则应该可以根据 %%-中的条目随时切换提供程
序。
为实现此灵活性,我创建了 #1!接口,该接口具有用以检索和更新客户订
单,以及检索支持的客户和产品信息的方法(请参见图 A)。本示例应用程序包括两个实
现 #1!的类:使用 的 B,#1!;使用
和 的 #1!(请参见图 ")。您仅可以为 的 %%-
文件中的“#1!:设置输入完全限定的类名称,并使用 +,类的
(方法创建此类的实例,从而将其转换为 #1!。!1对
实现 #1!而使用的类没有特别要求,因此您可以选择任何数据提供程序:
#1!%1!C
+,69*-+,
(-*,#1!/*
#1!?
图 A将 与接口分离
%
.
DD, %-+=
*-C+=?
%*+,#1!
.
DD1(*/#!*/!
(*')6(*?
#!*')6#!*?
!')6(*!-*?
DD($%!
!6!!?
!(!!!?
!$%!!!!?
1!,!!!?
剩余17页未读,继续阅读
yang_guang123_
- 粉丝: 1
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 27页智慧街道信息化建设综合解决方案.pptx
- 计算机二级Ms-Office选择题汇总.doc
- 单链表的插入和删除实验报告 (2).docx
- 单链表的插入和删除实验报告.pdf
- 物联网智能终端项目设备管理方案.pdf
- 如何打造品牌的模式.doc
- 样式控制与页面布局.pdf
- 武汉理工Java实验报告(二).docx
- 2021线上新品消费趋势报告.pdf
- 第3章 Matlab中的矩阵及其运算.docx
- 基于Web的人力资源管理系统的必要性和可行性.doc
- 基于一阶倒立摆的matlab仿真实验.doc
- 速运公司物流管理模式研究教材
- 大数据与管理.pptx
- 单片机课程设计之步进电机.doc
- 大数据与数据挖掘.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0