基于NET的ORM框架设计的探讨和实现论文.doc_第1页
基于NET的ORM框架设计的探讨和实现论文.doc_第2页
基于NET的ORM框架设计的探讨和实现论文.doc_第3页
基于NET的ORM框架设计的探讨和实现论文.doc_第4页
基于NET的ORM框架设计的探讨和实现论文.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文) 第 I 页 基于.NET 的 ORM 框架设计的探讨和实现 摘 要 目前,ORM 技术已成为软件工程领域的一个研究热点,ORM 的应用能极大的降 低业务层和数据层的耦合度,提高系统的可扩展性、可维护性和项目的开发效率,最 主要的是它使面向对象的思想贯穿于软件项目的设计和开发过程,实现对象模型向关 系模型的转化及数据持久化操作的透明性。 本设计通过研究关系模型和对象模型的概念、组成及各自的优缺点,分析出两种 模型间存在的阻抗不匹配问题及问题产生的原因;探讨基于.NET 的 ORM 框架设计应 有的组成部分及其实现方法。初步实现一个基于.NET 的 ORM 框架TCORM,在该 框架中实现代码生成器、持久化 API 和对象关系映射原则三个部分;在“湖南大学离 退休信息管理系统”开发中引入 TCORM 框架后,使系统以面向对象的方法进行设计 和开发,其数据持久化操作完全透明化,验证出 TCORM 框架的可行性和实用性。 本文详细叙述设计者对关系模型和对象模型的研究成果和对基于.NET 的 ORM 框 架设计的研究成果;概述 TCORM 的详细设计和具体实现,并展示 TCORM 框架在 “湖南大学离退休信息管理系统”项目开发中的运用。 关键字:对象关系映射,持久化,ORM,对象模型 毕业设计(论文) 第 II 页 The discuss and realize of ORM Framework based on .NET Abstract Nowadays, the Object Relational Mapping(ORM) has become a new hotspot in the field of software engineering. The application of ORM can greatly reduce the coupling degree between the business layer and the data layer , and improve the systems scalability and maintainability. At the same time, the efficiency of development is also improved. Using ORM Framework in application is equal to erecting a bridge between relational model and object model. It can free developers from rudimentary and repeated work, and make them have more time to pay attention to the real commercial demand. The content of this design is to research the concept , theoretical foundation of the object model and the relational model, and analyze the reason which cause impedance mismatch between the two models; Moreover, the theoretical technology about how to realize the ORM Framework based on .NET and the components of ORM Framework are discussed; Whats more, an ORM Framework based on .NETTCORM has been realized, which comprises a code-generator, persistent API and a rule of object relational mapping; At last, the TCORM Framework was used in the development of Retire management system of Hunan University to validate its feasibility and practicability. The paper describes the research results in detail and summarizes the detailed design and realization of TCORM, then shows its application in Retire management system of Hunan University. Key Words: object relational mapping, Persistence, ORM, Object model 毕业设计(论文) 第 III 页 目 录 1绪论 .1 1.1 课题背景及意义.1 1.2 国内外研究现状.1 1.3 ORM 相关产品简介.2 1.3.1 ObjectSpaces.2 1.3.2 NHibernate.2 1.3.3 XPO.3 1.4 论文构成及主要内容 .3 1.5 本设计的主要成果 .3 2相关模型的研究 .4 2.1 关系模型.4 2.1.1 关系模型的相关数学理论.4 2.1.2 关系模型的构成.4 2.1.3 关系模型的优势与局限性.4 2.2 对象模型 .5 2.2.1 对象模型的相关理论.5 2.2.2 对象模型的构成.5 2.2.3 对象模型的优势和局限性.5 2.3 阻抗不匹配问题 .6 2.3.1 阻抗不匹配问题的由来.6 2.3.2 产生阻抗不匹配问题的原因.6 3ORM 框架的组成及实现方法.7 3.1 对象关系映射原则和实现方法 .7 3.1.1 结构映射.7 3.1.2 关系映射.8 3.2 对持久类对象进行 CRUD 操作的 API .10 3.2.1 新增.11 3.2.2 选择.11 3.2.3 删除.11 2.3.4 修改.12 3.3 代码生成器.12 3.4 面向对象的查询语句 .12 4TCORM 框架的设计和实现.13 4.1 TCORM 框架的设计总述.13 4.2 TCORM 框架的详细设计.13 4.2.1 对象关系映射的详细设计.13 4.2.2 持久化 API 的设计.17 4.2.3 代码生成器(TCCreator)的设计 .19 毕业设计(论文) 第 IV 页 4.3 TCORM 框架的具体实现.20 4.3.1 开发环境介绍.20 4.3.2 TCORM 框架的具体实现.21 5TCORM 框架在项目中的实际运用.23 5.1 运用描述.23 5.2 相关配置.23 5.2.1 架构系统结构.23 5.2.2 配置映射文件路径.23 5.2.3 编写实体类和映射文件.23 5.2.4 编写代码.25 结论与展望 .31 致 谢 .32 参考书目 .33 毕业设计(论文) 第 1 页 1绪论 1.1课题背景及意义 目前基于.Net Framework 和关系型数据库的项目开发过程中,数据库访问建于传 统数据库访问模型的基础之上,即通过利用 Connection,Command 等对象和编写 SQL 语句来与数据库交互。在.Net 环境下的数据访问,都须调用 ADO.NET。尽管在体系 结构设计时采用分层的思想,重用所有数据库访问和持久化函数,但这些持久化的函 数中仍然重复很多近似且通用的模式。开发时,要求开发人员必须熟悉 SQL 语句、语 法、规则等,除直接使用存储过程实现业务处理外,程序员都要在持久层编写 SQL 语 句,导致项目中大量出现 SQL 语句,阻碍程序的可读性及可维护性。同时,加入新项 目时,很多持久层代码须重写,不但增重程序员负担,而且项目开发没有更好的发挥 面向对象技术的优势。 ORM(Object Relational Mapping)是一种解决面向对象与关系数据库在开发过程 中互不融合的技术。 ORM 通过使用描述对象和数据库之间映射的元数据,提供一系 列的映射规则和数据持久化 API,将.Net 程序中需要持久化的对象保存到关系数据库 中,本质上就是将数据从一种形式转换到另外一种形式,起到中间件的作用。而 ORM 框架就是实现 ORM 技术的框架,在项目开发中使用 ORM 框架后,设计者无须关心实 体对象如何存储到数据库中以及在数据库中如何存储,只要按照最普通的方式设计并 使用实体对象,ORM 框架将很好的处理各种关系处理。 1.2 国内外研究现状 1.国外研究现状 早在 1998 年,Scott W Ambler 就写出关于 ORM Persistence Layer 的详细设计论文 1。在文中,提出 Class Type Architecture 的结构设计思想,并基于该思想设计过一个 持久层框架。后来 Artem Rudoy 根据这个框架开发出一个利用 ORM 实现 PL(Persistence Layer)的开源项目2。该组件的出现,使 Scott 的持久层设计的可行性 和先进性得到验证,从而使与 ORM 技术相关的研究迅速成为研究热点。 目前国外的 ORM 框架很多,关于 ORM 技术的研究也比较成熟。最具代表性的是 毕业设计(论文) 第 2 页 基于 Java 的 Hibernate 框架,它不但完整全面的实现对象关系之间的映射和持久化操作, 还实现对象查询语句(HQL)向 SQL 语句的解释转换,提供真正意义上的对象化查询 操作,在很大程度上做到程序开发与数据库的无关性。 NHibernate 是一个基于.NET 的针对关系型数据库的对象持久化框架,它的设计思 想及功能完全模仿 Hibernate。 2.国内研究现状 相比国外,国内有关 ORM 的研究还处在起步阶段。在.NET 领域,ORM 技术已经 引起开发人员足够的重视,研究和开发 ORM 框架成为一个热门话题。目前国内各大型 软件公司的开发中都引入 NHibernate 框架,并开始对基于.NET 的 ORM 技术进行研究。 开源市场上也有很多实现 ORM 技术的轻型组件或框架,但它们都有很大的局限性和片 面性。总的说来,国内关于 ORM 技术的研究还有待深入。 1.3 ORM 相关产品简介 尽管 ORM 还处于研究和发展的阶段,但 ORM 技术的巨大优越性使它很快成为面 向对象开发中的主流开发模式。 相对于 Java 平台下的 ORM 技术的蓬勃发展,.Net 平台下的 ORM 技术处于起步阶 段。.Net 平台下比较有代表性的 ORM 框架是 ObjectSpace、NHibernate 和 XPO,它们 代表大多数基于.Net 平台的 ORM 框架风格。下面将对以上三种 ORM 框架进行简介: 1.3.1 ObjectSpaces ObjectSpaces3是微软 2006 年正式发布的 ORM 组件,它需要自己建立一个实 体类,使用 OSD、RSD、MSD 三种 xml 文件来分别描述所有实体类的定义、关系 数据库中所有表的信息。ObjectSpaces 使用 Microsoft 创建的一套融入 XPath 和 SQL 思想的搜索语言OPath 语言进行查询。开发人员使用 ObjectSpaces 时, 须先在数据库中建好表结构,再根据表结构建立相关映射文件和实体类。 1.3.2 NHibernate NHibernate4是基于 Microsoft .NET Framework 的 ORM 框架,它从基于 Java 平台开发的 Hibernate 项目移植而来。与 ObjectSpaces 一样,NHibernate 使用硬编 毕业设计(论文) 第 3 页 码实体类来定义类结构,但只用一种 Xml 文件来描述数据库表结构和实体类结构 的对应关系以及实体类结构之间的关系。NHibernate 可以支持非常复杂的对象之 间的关系,包括 OneToOne、ManyToMany、OneToMany 等。Nhibernate 使用完全 面向对象的 HQL 语言进行查询。 1.3.3 XPO XPO5是 DevExpress 公司的商业 ORM 产品,XPO 即 eXpress Persistent Objects for .NET。它采用自定义属性的方式实现 Class 与 Table 的映射,不像 ObjectSpace 用 xml 文档保存映射信息,XPO 通过在类或者方法面前加特性完成映 射,是种单纯的持久化类映射。 1.4 论文构成及主要内容 本论文主要由五大部分组成: 1.绪论:介绍本课题的相关背景,设计意义及国内外研究现状和各主流 ORM 框架; 2.相关模型的研究:详细介绍关系模型和对象模型的概念,组成及优缺点,着重 介 绍两种模型间存在的阻抗不匹配问题,并论述问题产生的原因; 3.ORM 框架的组成及其实现方法:介绍 ORM 框架的四个组成部分及所涉及的原 理和技术,着重介绍 ORM 框架的核心部分对象关系映射原则; 4.TCORM 框架的设计和实现:介绍 TCORM 框架各组成部份的设计和实现。其 中 重点介绍 TCORM 框架的持久化 API 部分的设计和实现; 5.TCORM 框架在项目中的运用:介绍 “湖南大学离退管理信息系统” 项目中引 入 TCORM 的开发过程。 1.5 本设计的主要成果 本设计的主要成果是:对基于.Net 的 ORM 框架设计的组成部分及原理进行深入 探讨,深刻理解 ORM 技术的原理及设计意义。实现一个基于.NET 的 ORM 框架 毕业设计(论文) 第 4 页 TCORM 框架。该框架通过在“离退休管理信息系统”中运用证明其可行性和实用性。 毕业设计(论文) 第 5 页 2相关模型的研究 既然 ORM 框架是架设在关系模型和对象模型之间的一座桥梁,那就必须对它要沟 通的两个模型关系模型和对象模型以及两个模型之间的联系和它们之间存在的问 题进行深入的了解。本部分将分析对象模型、关系模型、以及对象模型和关系模型之 间存在的“阻抗不匹配”问题。 2.1 关系模型 2.1.1 关系模型的相关数学理论 关系模型建立在严格的数学理论基础上。该数学理论属于集合理论中的关系 理论,关系模型是列(域)的笛卡尔乘积的子集。 2.1.2 关系模型的构成 关系模型把世界看作是由实体和关系构成。在关系模型中,实体是以二维表 形式来表现。表的每一行表示实体的一个实例,表的每一列描述实体的一个特征 和属性。关系是指实体之间的对应关系。通过关系就可用一个实体的信息来查找 另一个实体的信息6。 关系模型提供一组完备的关系运算,以支持对数据库的各种操作,关系运算 的理论是关系代数和关系演算。关系数据库的数据操纵语言以关系运算理论7为基 础实现。 常用的关系操作包括:选择、投影、连接、除、并、差、交等查询操作和新 增、修改、删除操作两大部分。而 SQL 不但提供以上所述的各种关系操做,还提 供了一些非关系操作功能如聚集函数、新增、修改、删除。 关系模型中的完整性约束是指为保证数据库中数据的正确性和一致性而采取 的数据完整性规则:包括实体完整性规则和参照完整性规则9。 2.1.3 关系模型的优势与局限性 关系数据库语言是过程化语言,编写简单,而且在关系型数据库中组织简单 的数据结构形式良好方便。但关系模型强调数据的高度结构化,关系语言上面向 毕业设计(论文) 第 6 页 机器的语法数据模型,它无法克服面向应用的缺点;而且,关系语言语义表示能 力差,无法表示客观世界的复杂对象;在关系型数据库中表示的数据类型也单一 固定,不能提供新类型的定义和生成能力。 2.2 对象模型 2.2.1 对象模型的相关理论 面向对象的观点认为,客观世界是由各种各样的实体,即对象组成。每种对 象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用构成各种 不同的系统,进而构成整个客观世界。面向对象模型不是建立在严格的数学理论 基础之上,其本质更接近于人类认知事务所采用的哲学观模型。 2.2.2 对象模型的构成 对象模型由对象及对象之间的关系构成。类是在属性和行为上一致的对象集 合的抽象。 1.类和对象的关系 类是建立对象模型的基本单元。通过对对象进行抽象得到类。类由类名、属 性和方法组成。 2.类之间的关系 在类和类之间存在有五种关系关联关系,聚合关系,组合关系,泛化关 系和依赖关系。 2.2.3 对象模型的优势和局限性 对象模型与关系模型的根本区别是对象模型是面向运用。它提供丰富的语义 和自然的表达式,方便的直接表达运用领域的事物和它们之间的关系。但是与关 系模型相比,对象模型缺乏一个完善的理论指导,还没有公认的形式化描述。因 此对象模型不适合在一些要求精确计算和高效处理的场合使用。 毕业设计(论文) 第 7 页 2.3 阻抗不匹配问题 2.3.1 阻抗不匹配问题的由来 采用基于对象模型建模和处理业务逻辑的面向对象技术是九十年代软件技术 发展的主流,在软件开发中广泛的应用,很大程度的提高软件开发效率,成功的 解决“软件危机” ;基于关系模型实现的关系数据库是现在采用最广泛的数据存储 机制,在很多商业应用程序中都有成熟的运用。 对象模型和关系模型分别是处理业务逻辑领域和数据存储领域的最佳解决方 案。然而把这两者结合起来构成一个完整的软件系统并不容易,经常出现这样一 个情况:开发人员在把对象所带的数据存入数据库之前要先分解对象,然后再把 这些数据存入一个或多个数据表中;在使用数据的时候,必须使用 SQL 语句查询 一个或者多个表来获取相关数据,并把这些分散的数据重新组装到一个对象里。 这些工作造成的代码编写量大、耗时,通常占去整个软件开发时间的 25%到 40%,这种情况是由对象模型和关系模型之间的分歧所造成。人们使用一个来自 电子工程领域的术语“阻抗不匹配”来命名这个问题。 2.3.2 产生阻抗不匹配问题的原因 对象模型和关系模型之间存在着固有差异:对象模型侧重于使用包含数据和 行为的对象来构建运用系统,常常通过对象之间的关系来进行访问。关系模型以 二维表的形式来管理所有的数据,并且认为通过外键就足以表示数据间所有的关 系。但面向对象模型中使用的数据很凌乱,可能需要用到多维数组或者内嵌式表 格这样的结构,这些结构都比二维平面表要更复杂。要在关系模型中表示这样的 数据,常常需要创建很多的表格和外键关系,结构异常复杂。关系模型没有考虑 到对大对象支持的需要,如文本、图像、视频、音频等,也不支持对象模型中的 一些机制,如封装发,继承,多态等。 基于以上原因,人们在关系模型和对象模型之间传递数据时,就会产生不匹配的问题。 毕业设计(论文) 第 8 页 3ORM 框架的组成及实现方法 一般的 ORM 框架包括以下四部分: 1.对持久类对象进行 CRUD 操作的 API: 统一的 CRUD 实现函数,将数据持久化的重复操作进行封装,取代程序员开 发过程中大量相似模式代码的编写任务,提高开发效率以及代码质量; 2.用来规定与类和类属性相关查询的语言或 API: 基于 SQL 的中间查询语言 QL(Query Language) ,将 SQL 的执行透明化,解 放程序员关于关系型查询语句的束缚,同时彻底实现项目开发中面向对象的操作; 3.规定 Mapping metadata 的策略或规则: 实现对象关系映射是 ORM 框架的核心功能; 4. 代码生成器; 实用的 ORM 框架都该具备代码生成器,以便用户利用框架时生成简单的实体 -关系映射文件,但仍然保留接口使开发人员亲自编写实体映射文件,使其自定义 复杂的映射规则。 3.1 对象关系映射原则和实现方法 由于关系模型主要组成成分是数据库中的表和表与表之间的关系,而对象模型的 主要组成成分是对象以及对象之间的联系,所以为消除对象模型与关系模型的不匹配, 有必要在它们的组成成分间建立一个映射关系,包括结构映射和关系映射。能多大程 度上实现以上的映射关系,决定着 ORM 组件功能的强弱程度。 3.1.1 结构映射 1.属性类型映射成字段类型。将类中的属性类型映射成数据库中的字段类型。进行 转化时能在数据库中找到和类中的属性类型直接对应的域。只需注意数据的大小 是 否一致,并对域的取值范围进行限制。 2.属性映射成字段。类的属性可以与关系数据库中的 0 个或多个字段对应,因为并 不是类中的所有属性都要存入数据库。 毕业设计(论文) 第 9 页 3.类映射成表。在非常简单的应用中,类与表之间是一一对应的关系。在这种情况 下,持久类的所有属性直接映射为表的相应属性。然而,多数情况下,并不是这 样 简单的应用,类与类之间有复杂的关系。这取决于关系映射的方式。 3.1.2 关系映射 1.在关系数据库中实现泛化关系 因为泛化关系包括继承关系和实现关系,而对于类与类之间来说,泛化关系 就是继承关系。因此这里用继承关系来说明泛化关系在关系数据库中的实现机制。 在关系数据库实现继承实际上就像处理如何在数据库中保存在一个继承体系中父 类及其子类的属性值的问题。为了说明关系数据库中如何处理继承问题,本文首 先给出一个简单的类层次作为例子,如图 3.1 所示 图 3.1 继承关系图 该图包含有四个类:Person、Soldier、Worker 和 Pointsman。Person 类包含有 一个 Name 属性,Soldier 类包含军团名称属性、Worker 类包含 Works Pay 属性、 Pointsman 类包含 Pointsmans Pay 属性。 对于任何继承结构,关系数据库一般有三种实现的方法: (1)单表继承 将处在同一个层次中的所有类映射为一个数据库表,表中保存所有类(基类、 子类)的属性。其中,属性 ObjectType 是指类的类型,即指明当前操作的是类层 次中的哪个类。该方法的实现如图 3.2 所示。 毕业设计(论文) 第 10 页 图 3.2 单表继承图 (2)具体表继承 把处在同一个继承层次中的每一个具体表都映射成单个数据库表,把每一个 对象映射成为一个单独的数据库行。数据库表包含自身的属性和继承来的属性, 抽象的基类不参与映射。该方法的实现如图 3.3 所示。 图 3.3 具体表继承图 (3)类表继承 把每一个具体类都映射成单个数据库表,就是领域模型中对于每一个类都有 一个表,领域类中的域直接映射到相应表中的字段。该方法的实现如图 3.4 所示。 毕业设计(论文) 第 11 页 图 3.4 类表继承图 2.在关系数据库中实现关联 在对象模型中可以将类之间的关联关系表示为三种对应关系:一对一,一对 多和多对多。以下部分将阐述如何在关系数据库中映射这三种关联关系。 (1)一对一 一对一的关联关系在数据中有两种实现方式。一种是将两个对象的属性都对 应到一张表中。另外一种就是使用一个外键指向另外一张表来表示一对一的关系。 (2)一对多 在关系数据库中,要表示数据之间的一对多的关系,通常要两张表。其中一 张表中会定义一个外键指向另外一张表,并且将外键放置在“多”的一方。 (3)多对多 在关系数据库中,实现多对多关系有两种方式。一种是分别在两张表中都放 有外键指向另外一张表,另一种方法就是引入一张关系表,专门用来存放两个表 之间的关联,使原来以多对多关联的两个表与关系表成为一对多的关联。 3.在关系数据库中实现组合/聚合 组合与聚合是特殊的关联关系,在关系数据库中实现的方式与关联类似。 毕业设计(论文) 第 12 页 3.2 对持久类对象进行 CRUD 操作的 API ORM 框架的最终目的是实现对象状态信息持久化的透明性,所以每个 ORM 框架 都需要实现对持久类对象进行 CRUD 操作的 API,以使程序员运用 ORM 框架进行对 象状态持久化时尽可能的实现完整意义上的面向对象操作。 对象持久化方式与对象关系映射原则紧密关联,API 的设计需要考虑各种映射原 则下 CRUD 操作的实现。在所有的映射原则中,关于类结构的映射是统一的,所涉及 的 API 设计方式一致,但关系的映射情况复杂多样,不同框架考虑的层次和范围不同, 实现的方式也不同。下面研究 API 设计时需要考虑的问题和要实现的功能。 3.2.1 新增 对象状态的新增,就是将对象的状态插入到数据库表中。新增函数首先要根 据映射信息,生成相应对象状态信息的 Insert 语句;然后调用 ADO.NET 中的对象 实现信息的插入;最终返回给程序员操作的结果。 继承关系是插入时需考虑的最复杂的情况,针对上面所谈及的在关系数据库 中实现继承关系的三种情况,新增函数需要分别实现对象状态信息的插入操作。 3.2.2 选择 选择对象信息的功能是 ORM 框架 API 设计的核心和重点,能否很好的实现 选择功能是衡量一个 ORM 框架持久化功能好坏的重要标准。API 在实现选择功 能时,不但需要考虑不同实现方式的继承的选择操作,还需要考虑类之间的关系。 针对程序员不同的需求,ORM 框架提供的 API 首先需能够生成相应需求的 Select 语句;然后调用 ADO.NET 的对象实现选择操作;最终根据程序员的要求, 能以不同的形式返回查询结果,例如 DataTable 形式或者对象集合的形式。 3.2.3 删除 删除对象,一般需实现两种情况:一是根据对象的主键值将对象删除;二是 根据程序员设置的删除条件将对象删除。 删除函数首先需要根据映射信息(和设置信息) ,生成相应对象的 Delete 语句; 毕业设计(论文) 第 13 页 然后调用 ADO.NET 中的对象实现信息的删除;最终返回各程序员操作的结果。 继承关系是实现删除时要重点考虑的关系,因为针对不同的继承映射方式, 删除所涉及的操作不同。 2.3.4 修改 修改对象信息,一般有两种实现方式:一是对象每次执行更新操作时,将与 对象相关的所有属性全部更新;另一种是将新的信息与数据库原有信息进行对比, 只修改数据库中被改变掉的信息。 修改函数的设计是 API 设计中涉及范围最广的一项操作,因为修改包括新增 和删除操作。 3.3 代码生成器 由于实体类形式上的一致性和映射原则的确定性,ORM 框架可实现生成固定模式 的代码或者映射文件的代码生成器。通过使用与 ORM 框架相配套的代码生成器,程序 员可以减少很多重复枯燥的编码工作。 代码生成器生成的实体类代码或者相应的映射文件与对象关系映射原则及其实现 方式相关,所以 ORM 框架最好能配有相应的代码生成器。 3.4 面向对象的查询语句 一方面,由于 API 实现完善的选择操作很难实现;另一方面,程序员在 ORM 技 术推广以来进行的数据持久化操作都是面向 SQL 语句的。所以,有必要提供面向对象 的查询语句,使程序员以面向对象的方式进行查询操作。 毕业设计(论文) 第 14 页 4TCORM 框架的设计和实现 4.1 TCORM 框架的设计总述 TCORM 框架是基于.NET Freamwork1.1 开发的 ORM 框架,其主要实现对象关系 映射、对象持久化 API 和代码生成器。由于面向对象查询的实用性和理论研究尚不成 熟,本设计将其核心功能移入持久化 API 中。 目前在.NET 下实现对象关系映射一般有两种方式:一是利用 XML 文件作为映射 文件,另一种是利用.NET Framework 提供的属性扩展性机制。本设计采用 XML 文件 作为映射文件来实现对象关系映射。 TCORM 框架只针对 SQL 数据库实现对象关系映射,多数据源的支持将在下一版 本进行扩展。框架最终将以.dll 形式发布给程序员使用。 4.2 TCORM 框架的详细设计 4.2.1 对象关系映射的详细设计 本部分主要包括两方面的内容,一是对对象关系映射原则的设计,二是如何 使用 XML 文件表示这些映射信息。 1.结构映射 (1)类型映射时,根据表 4.1 中的内容,要求程序员在设计 XML 映射文件时按照该 表的内容将类属性的类型和相应字段类型都写出来。XML 文档中以 attributetype 属性标识对象的属性类型;columntype 属性标识字段类型。 (2)属性映射有四种情况:1:1 映射,类中的属性直接对应数据库表的某一列; 1:0 映射,类中的属性不用持久化到数据库,它是系统架构师在程序设计时增添 的;1:n 映射,基于面向对象的原则,某个类中的属性可能是其它的类,这样的 关系涉及到类之间的关联关系;n:1 映射,这是对象中的几个属性凑在一起成为 数据库表中一个字段的内容;1:n 映射情况,牵涉到类之间的关联关系,将在关 系映射部分进行设计;n:1 映射时要求程序员在设计时增设一个对应的字段,将 n:1 映射转换为 1:1 的映射来实现。在映射过程中,属性名映射为字段名,属性 类型映射为字段类型,属性的默认值映射为字段的默认值。XML 文档中,属性的 毕业设计(论文) 第 15 页 映射信息包含三个部分,attribute 部分包含对象与表中所有的字段的映射信息; primaryKey 部分包含一个表中所有的主键映射信息;foreignKey 部分包含一个表 中所有的外键映射信息。每个字段的映射信息如下: 表 4.1 类型映射表 SQL ServerXML 中的 type.NET 内置类型 bigintbigintSystem.Int64 binarybinarySystem.Byte bitbitSystem.Boolean charcharSystem.String datetimedatetimeSystem.DateTime decimaldecimalSystem.Decimal floatfloatSystem.Double imageimageSystem.Byte intintSystem.Int32 moneymoneySystem.Decimal ncharncharSystem.String ntextntextSystem.String numericnumericSystem.Decimal nvarcharnvarcharSystem.String realrealSystem.Single smalldatetimesmalldatetimeSystem.DateTime smallintsmallintSystem.Int16 smallmoneysmallmoneySystem.Decimal sql_variantsql_variantSystem.Object texttextSystem.String timestamptimestampSystem.Byte tinyinttinyintSystem.Byte uniqueidentifieruniqueidentifierSystem.Guid varbinaryvarbinarySystem.Byte varcharvarcharSystem.String (3)类的映射需考虑要持久化的超类、具体类两种类。针对程序中的每一个须持久 化的类,都要设计一个映射文件。名称定为:类名+Map+.xml,xml 文档中用下面 的节点表示: 毕业设计(论文) 第 16 页 2.关系映射 (1)关联的映射 关联映射分单向关联映射和双向关联映射: 若 A 类以 1:1 约束单向关联 B 类,在 XML 文档中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论