基本处事层提供数据库会见层对外接口的界说和对内数据会见的打点,是业务逻辑层和数据库会见在逻辑上的中间毗连层。
仓储层为基本处事层提供对应处事,Code first是以Dbcontext模子为容器把实体工具和数据库成立起链接的,差异的实体工具大概属于差异的容器,仓储层就实现了详细的实体工具和对应的Dbcontext模子索引。
Code First是基于Entity Framework的新的开拓模式,本来只有Database First和Model First两种[6]。Code First顾名思义,就是先用C#/VB.NET的类界说好规模模子(实体类),然后用这些类映射到现有的数据库表可能自动发生新的数据库表。Code First同样支持通过Data Annotations或fluent API举办定制化设置[7]。个中Entity Framework库内里的DbContext基类为操控实体工具执行上下文情况,提供所需的架构和映射元数据(Meatadata)、数据库链接,同时还包罗工具缓存、跟踪状态和关联打点等成果[8]。利用时,界说一个担任于DbContext的类,在该类内里设置好需要映射到数据库表的各实体类。设置好后,这个类就成为了业务逻辑层里实体类和数据库表交互的中间模子。
先界说一个实体类Person,担任于DomainObject。这里DomainObject类只有一个Guid范例的字段。本模块设计时对实体类做出了限制:任何实体类只有担任于DomainObject类才气被映射到数据库。
DataContextService内里ConfigureSectionName是设置文件设置节的名称。当实现DataContextService的扩展类探查到数据库会见层后,将返回的仓储工具与本身索引起来存入Dictionary(索引容器)内里,下次探核对应仓储工具时就不需要再通过反射获取工具,这样可以提高代码运行效率,本文的设计中多次用到这种方法来晋升模块机能。返回的仓储工具才真正实现GetRepository()要领。
3 应用研究
图3 仓储层布局
数据会见层实现了一套对差异的实体工具自动生成对应Dbcontext模子的机制,这样外部业务逻辑层利用本模块,通过泛型参数传入实体范例,该机制就会对其自动生成属于这个实体的Dbcontext模子。
1 相关技能
1.2 Code First
如图3所示,DataContextProvider为仓储层的焦点抽象类,实际的仓储类(如DomainObjectContext Provider类)担任该范例并实现CreateDbContextCore()虚要领,以提供该仓储类对应数据库会见层即对应的DbContext的扩展类。DbContext的扩展类是读数据库会见要领的最终提供者,EFRepository 类通过传入差异的DbContext扩展类实现了IRepository接口。
数据库会见层是搭建在.NET Entity Framework框架的Code First方法之上的,将映射到数据库表的各实体类通过DbContext类的扩展类设置好后,这个扩展类认真这些实体类与数据库表的交互,这些实体类便共用了这个执行上下文情况。当不需要定制巨大的映射干系(大部门环境下)时,可以直接以dll的形式利用本模块,这么做实际上是每个实体类通过一个DbContext类的扩展类映射到数据库,即每个实体类独立一个执行上下文情况,将实体类泛型化,每个实体类通过泛型范例传入数据会见层,该层会通过层层挪用自动生成对应的DbContext类的扩展类(执行上下文)。当需要举办定制化设置时,可以重写DataContextService,DataContextProvider,DataContext三个抽象类,手动举办实体类的设置,并在设置文件里设置好干系。可见本模块的可扩展性较量好。
本文实现的数据库会见模块主要目标在于实际应用,为了更直接地展示其利用的快捷、简朴,下面通过实际例子加以说明。
如图4所示,该层基于EF的Code first方法设置模子实现对数据库的会见,DbContext担任DbContext,重写了数据库链接字符串,并修改了EF库对多个DbContext扩展类会见同一数据库斗嘴的裂痕,且实现了数据迁移特性即当实体类里有字段变革时,这种变革能自动移植到对应的数据表列。然后用户可以担任DbContext类按照自身的需求设置差异的实体工具执行上下文情况,并向上提供应对应仓储类。今朝DbContext已支持Sqlserver之外的数据库如Oracle,所以通过设置甚至可以实现对Oracle数据库的会见支持。
如图1所示,该数据库会见模块逻辑上又分三层:基本处事层、仓储层、数据会见层。基本处事层,该层通过读取设置文件信息得到对应仓储的措施集名和范例名,然后通过“反射”获取该仓储范例的工具。仓储层,提供对应差异数据库(SQL Server、Oracle等)的数据库会见层。数据库会见层,直接与数据库相连并对外提供增、删、改、查等底层要领以供顶层挪用,这里回收了微软的Code First框架来实现对数据库的直接会见,也就是数据会见层。个中,基本处事层和仓储层都担任了同一个接口IDataContextProvider,该接口在仓储层得以实现,从而实现了业务逻辑层、数据库会见层、数据库三者之间的解耦。
实体框架,是一种工具干系映射机制(ORM),可以或许淘汰.NET Framework开拓人员面向工具编程情况与干系数据库情况之间的不匹配景象[4],使开拓人员根基上可以通过熟悉的面向工具的技能来与应用措施的观念模子举办交互[5]。在实体框架中,开拓人员可以或许以特定于域的工具和属性(如客户和客户地点)形式利用数据,而不必思量存储此数据的基本数据库表和列。开拓人员可以对观念模子发出数据会见操纵,然后实体框架会将该操纵转换为干系数据库操纵。
如图2所示,DataContextService为基本处事层的焦点抽象类,业务逻辑层(如:DomainObjectContext Service类)实现该范例,以会见该业务逻辑模块所提供的数据相关的操纵。各个业务层模块针对自身模块的数据会见处事,必需担任于该类。并重写设置文件ConfigurationGuid,就可以实现通过设置文件探查到数据会见层。本类为业务层和数据会见层解耦提供基本处事。该类实现了IDataContextService接口,IDataContextService接口中界说了一个GetRepository()要领返回了一个Repository泛型工具,该工具封装了对数据库的增、删、改、查要领,并担任了IQueryable即支持linq查询。
1.1 Entity Framework
2.1 总体设计框架
图4 数据会见层
本文设计的数据库会见层办理了以上问题,它与业务逻辑低耦合,利用简朴,以高度封装的DLL形式挪用,可以节减大量的对数据库存取的繁琐操纵,措施员能从数据库存取中摆脱出来专注于业务逻辑的设计。
2 数据库会识趣制设计
企业在开拓软件的进程中,为晋升开拓效率和增加技能积聚,对差异的项目需求提取出一些配合的框架,数据库会见层即是个中之一。今朝有许多好地ORM[1?2](工具干系映射机制)框架已经很好地实现了数据会见层,并且获得了很遍及的应用,但由于很多公司技能人员程度有限,提取的数据库会见层和业务逻辑层的耦合水平不高,对开拓效率上的晋升不足明明[3]。
2.4 数据会见层
2.2 基本处事层
0 引 言
2.3 仓储层
提供所需的架构和映射元论文范文数据(Meatadata)、数据库链接
毕业论文库:计算机 时间:2016-10-11 点击:
次