ADO.NET Entity Fram ew ork建模技术研究

2010-08-15 00:52谢日星武汉软件工程职业学院湖北武汉430205
科技传播 2010年21期
关键词:程序开发实体模型字段

谢日星武汉软件工程职业学院,湖北武汉 430205

1 En tity Fram ew o rk简介

ADO.NET Entity Framework是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案。Entity Framework以Entity Data Model(EDM)为主,利用抽象化数据结构方式,将数据库对象转换成应用程序对象,库表字段转换为属性,并系转换为关联系统,把数据库的E/R模型转换成对象模型,使开发人员通过对概念应用程序模型编程来创建数据访问应用程序,以此降低面向数据的应用程序所需要的开发量,并减轻系统维护工作。

2 En tity Fram ew o rk建模

Entity Framework技术的应用中,可针对数据库中各个表按照1:1映射生成模型和映射信息,在代码中直接对表中数据进行增、删、改、查操作。但在实际应用中,这种简单的处理方式不利于进一步降低程序开发工作量,部分情况还违背了“程序开发以应用为中心的概念模型来工作”的理念,对象的概念不清晰。为此,对几种常用的数据库情景的建模方法进行介绍。

2.1 带有有效载荷的多对多关系建模

在带有有效栽花的多对多关系数据库中,关系表除了主键外,还有其他数据字段。在这种关系中,直接把表映射到实体模型中,两实体表自动创建对应的实体类型,而关系表也被映射成为一实体类型,在此实体类型中除了原有属性名,还有对应两实体表的导航属性,可分别通过1对多关系进行对象导航。

2.2 自引用关系建模

对于分类表之类的自引用表,把表映射成为实体类型后,其中将包含两个导航属性,分别对应父、子对象,其中父对象为1端,多端为子对象集合,因此分别把1端改名为父端名称如ParentCategory,多端改名为子对象集合名称如SubCategories。由此两导航属性可方便地访问到对应对象。

2.3 跨表实体建模

在数据库设计过程中,当一个实体的数据由于各种原因为分割在不同表中,而程序开发需要把实体所有数据集合在一个实体类型中。对于这种跨表实体的情况,建模时首先把所有的表都映射到实体模型中,然后调整实体类型,把主要表之外的其它表映射实体类中除主键对应属性外的所有属性复制到主要表映射实体类型中,然后删除主要表映射实体类型中的所有导航属性和其它表实体类型,在删除其它表实体类型时,不删除映射存储模型中的表,最后,在剩下的这一个表映射实体类型中,添加复制得到的所有属性的映射关系,分别映射到对应的表中的列。在实体操作过程中,映射关系能自动分别处理不同表中的对应数据。

2.4 多实体建模

在表中如果有部分字段内容较多并且不常使用,为提高程序性能,访问表时,一般只访问表中的部分字段,为此,建模时必须把表分割成多个实体。首先把表映射成一般实体类型,然后在设计器中创建新实体类型,添加对应原表中主健的属性,再把原映射实体类型中不需要的属性通过“剪切/粘贴”方法移动到新实体类型中,并把新实体类型中的所有属性映射到原表对应字段,然后在原实体类型中添加到新实体类型的1对1(或1对0.1)关联关系,最后,在添加以新实体类型为主体的到原实体类型的引用约束。通过实体类型访问数据时,两实体类型对象分别访问其属性对应的字段数据。

2.5 多表派生建模

数据库建模完成后,对于有些表存储另一表中额外信息的情况,可以针对这些表建立派生的类体系结构。首先,把所有表映射到实体模型中,分别映射成一个实体类型,然后删除实体类型之间的关联,再为基类(Business)添加继承,分别设置派生类为Retails和eCommerces,再删除派生类中的BusinessId属性,则根据表的结构完成类的体系结构建模,对Retails和eCommerces类型对象的操作会自动访问库表Retails、eCommerces及对应的Business表中对应记录。

2.6 表分割建模

对于常见的办公自动化系统数据库,由于员工类型不同,而薪水制度不同,其中EmployeeType值为1则为临时工,薪水按小时计算,Wage字段记录其每小时薪水,Salary字段为无效数据,如果EmployeeType值为2则为正式员工,薪水按月计算,Salary字段记录其每月薪水,Wage字段数据无效。为更好地实现在向应用编程,分别建立临时工和正式员工两种类型,但两种类型的数据都保存在Employees表中。建模过程首先把Employees表映射到实体模型中,成为Employees类,然后添加新实体HourlyEmployee,指定基类为Employees,然后通过“剪切/粘贴”把Employees中的Wage属性移动到HourlyEmployee中,用同样的方法添加实体FullTimeEmployee类型;再在HourlyEmployee实体中,添加映射条件:“EmployeeType = 1”,在FullTimeEmployee实体中添加映射条件:“EmployeeType = 2”,然后设置Employees类型为抽象类,并删除其中的EmployeeType属性,则HourlyEmployee和FullTimeEmployee自动处理EmployeeType字段的值,并能自动根据记录创建对应类型的对象。

3 结论

POCO技术要求尽可能的应用简单的类,以实现类型的独立性,本文所讨论的Entity Framework建模方法则常常需要把表进行分割建模或组合建模,在某些情况下将导致类的体系结构更为复杂,但却使程序开发更为符合业务的现实情况,能更充分地利用Entity Framework技术的各种技术优势。

[1]微软公司著.VS2010 MSDN.

猜你喜欢
程序开发实体模型字段
图书馆中文图书编目外包数据质量控制分析
APP应用程序开发模式探究
基于TestStand的自动检测程序开发
基于嵌入式系统Windows CE的应用程序开发
基于App inventor 2手机程序开发过程的学习与实——以“喵喵定时器”APP开发为例
建筑设计中的实体模型
建筑设计中的实体模型
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
关于CNMARC的3--字段改革的必要性与可行性研究