网学网为广大网友收集整理了,基于.NET的Object-Relation Mapping设计,希望对大家有所帮助!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
1 设计与实现要点 在这一节中,我会描述一些将对象成功映射成关系数据库所需的基本技术及其实现。 1.1 将属性映射成列 类属性将映射成关系数据库中的零或几列。要记住,并不是所有属性都是持久的。例如, 学生类会有平均成绩属性,这个属性由其实例在计算时使用,但它不保存到数据库中。而且,某些对象属性本身就是对象,例如汽车对象有一个作为属性的引擎实例,它映射为数据库中的几列。重要的是,这是一个递归定义:有时属性将映射成零或者多列。也有可能将几个属性映射成表中的单一列。 在常用的映射过程中,通常的方式有使用XML标记和代码级标记两种。在大部分的ORM工具中都是使用XML文件对需要映射的类进行配置,这样程序在编译或者运行时读取XML文件内容进行映射。我们以一个类举例,Message类有三个属性:Message的id 、消息正文、以及一个指向下一条消息的指针。其中id属性让我们的应用程序能够唯一的识别这条消息,通常它等同于数据库中的主键,如果多个Message类的实例对象拥有相同的id,那它们代表数据库某个表的同一个记录。对此类一个典型的Hibernate的XML映射配置文件有如下内容: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="hello.Message" table="MESSAGES"> <id name="id" column="MESSAGE_ID"> <generator class="increment"/> </id> <property name="text" column="MESSAGE_TEXT"/> <many-to-one name="nextMessage" cascade="all" column="NEXT_MESSAGE_ID"/> </class> </hibernate-mapping> 使用XML配置文件的方式可以利用XML文件强大的表达方式,但是XML过于烦琐的配置过程也是它的一个缺点。鉴于此,我在设计中使用了一种轻型的配置方式,通过.NET中提供的Attribute方式来进行配置。 Attributes是.NET中的一个创新,它可以对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述代码,或者在程序运行的时候影响应用程序的行为。因此在.NET中, Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。Attribute在源码级别上提供了一种元数据标志,通过这种元数据,来实现简单的AOP即面向方面的编程。这种方式后来也被Java所采用,即Java6中的Annotation。 除了.NET提供的那些Attribute派生类之外,我们可以自定义我们自己的Attribute,所有自定义的Attribute必须从Attribute类派生。Attribute以一种类似修饰符的方式来对代码添加额外的信息,这些额外的信息可以通过.NET中提供的另外一项功能:反射来获取。这样我们在程序运行时就可以对使用Attribute标记的代码进行额外的处理了。 为了实现属性到列的映射,我的ORM实现中定义了一个类FieldAttribute,它继承自System.Attribute, 它规定了数据库中表的列名称,列的名称,列的字段数据类型,主键类型以及是否为自增字段(如图3.1),当一个实体类的属性被此Attribute标记时,我们就在这个额外标记中提供了此属性在关系数据库中对应的表的字段,之后我们就可以在运行时通过反射来动态获取与此属性相关的数据库字段。这就为我们保存此属性的值到数据库和从数据库读取内容来初始化此属性提供了一个基础。 |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |