基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ORM体系的改进与ORM的新成员

      闲话不说了,接着前面的文章继续向大家汇报AgileEAS.NET 4.0本次重构的内容,AgileEAS.NET ORM体系的完善:本次重构调整了原有ORM的技术体系,并增加了新的Orm设计,同步兼容和支持原有Orm体系,原有的程序代码不经任务改变即可运行在新的平台之上。

      有关于AgileEAS.NET原有的Orm体系请参考AgileEAS.NET之数据关系映射ORMAgileEAS.NET之ORM访问器两篇文章。

      本次Orm技术的更新最大的地方是增加了新的Orm对象定义方案,原有的Orm是采用的基于类型于表格====>对象的数据及无数据存储方案:

 

     即原有Orm体系对某一对象的定义需要两个类来完成Table和Entity, Table用于定义实体的元数据及复杂查询业务,Entity用于实现O-R记录的转换,对于具体实体的数据存储在Entity之中,即Entity不存储O-R映射的元数据定义,用于提高性能。

     本次重构增加了一个新的ORM对象定义DataEntity,我们姑且称他为数据实现吧,新的Orm围绕DataEntity进行展开,数据及定义如下表所示:

 

     新的ORM对象定义代码如下:

  1:  /// <summary>
  2:  /// 实体对象NRCMItem(新农合药品/诊疗目录)。
  3:  /// </summary>
  4:  [Serializable()]
  5:  [Table("dbo.NRCMITEM")]
  6:  partial class NRCMItem: DataEntity<NRCMItem>
  7:  {
  8:      public NRCMItem()
  9:      {
 10:      }
 11:   
 12:      protected NRCMItem(SerializationInfo info, StreamingContext context)
 13:          : base(info, context)
 14:      {
 15:      }
 16:   
 17:      /// <summary>
 18:      /// 药品内码。
 19:      /// </summary>
 20:      [Column("Code","药品内码"),PrimaryKey]
 21:      public string Code
 22:      {
 23:          get;
 24:          set;
 25:      }
 26:   
 27:      /// <summary>
 28:      /// 药品分类 。
 29:      /// </summary>
 30:      [Column("Item","药品分类"),PrimaryKey]
 31:      public string Item
 32:      {
 33:          get;
 34:          set;
 35:      }
 36:   
 37:      /// <summary>
 38:      /// Name 。
 39:      /// </summary>
 40:      [Column("Name","Name")]
 41:      public string Name
 42:      {
 43:          get;
 44:          set;
 45:      }
 46:   
 47:      /// <summary>
 48:      /// 规格。
 49:      /// </summary>
 50:      [Column("Spec","规格")]
 51:      public string Spec
 52:      {
 53:          get;
 54:          set;
 55:      }
 56:   
 57:      /// <summary>
 58:      /// 单位 。
 59:      /// </summary>
 60:      [Column("Unit","单位")]
 61:      public string Unit
 62:      {
 63:          get;
 64:          set;
 65:      }
 66:   
 67:      /// <summary>
 68:      /// 单价。
 69:      /// </summary>
 70:      [Column("Price","单¥价?")]
 71:      public decimal Price
 72:      {
 73:          get;
 74:          set;
 75:      }
 76:   
 77:      /// <summary>
 78:      /// 报销比例。
 79:      /// </summary>
 80:      [Column("Rate","报销比例")]
 81:      public decimal Rate
 82:      {
 83:          get;
 84:          set;
 85:      }
 86:   
 87:      /// <summary>
 88:      /// 保内外。
 89:      /// </summary>
 90:      [Column("Cate","保内外")]
 91:      public string Cate
 92:      {
 93:          get;
 94:          set;
 95:      }
 96:   
 97:      /// <summary>
 98:      /// 甲乙分类。
 99:      /// </summary>
100:      [Column("PClass","甲乙分类")]
101:      public string PClass
102:      {
103:          get;
104:          set;
105:      }
106:   
107:      /// <summary>
108:      /// 助记码。
109:      /// </summary>
110:      [Column("InputCode","助记码")]
111:      public string InputCode
112:      {
113:          get;
114:          set;
115:      }
116:  }
117:   

     新的Orm使用属性定义方式处理O-R的映射定义在运行,为了提高元数据的处理性能,在Orm运行时使用了元数据缓存以提高数据处理效率,同时,新的Orm也吸引了原有Orm技术中的数据索引器技术,以获取更高的数据张载性能,代码如下:

  1:  /// <summary>
  2:  /// 实μ体?对?象ó GbCode(国ú标ê码?)。£
  3:  /// </summary>
  4:  [Serializable()]
  5:  [Table("im.GBCODE"),Index]
  6:  partial class GbCode: DataEntity<GbCode>
  7:  {
  8:      public GbCode()
  9:      {
 10:      }
 11:   
 12:      protected GbCode(SerializationInfo info, StreamingContext context)
 13:          : base(info, context)
 14:      {
 15:      }
 16:   
 17:      /// <summary>
 18:      /// 目录。
 19:      /// </summary>
 20:      [Column("CATEGORY","目?录?"),PrimaryKey]
 21:      public int Category
 22:      {
 23:          get
 24:          {
 25:              return this.GetValue<int> ("CATEGORY");
 26:          }
 27:          set
 28:          {
 29:              this["CATEGORY"] = value;
 30:          }
 31:      }
 32:   
 33:      /// <summary>
 34:      /// 编码。
 35:      /// </summary>
 36:      [Column("CODE","编码"),PrimaryKey]
 37:      public int Code
 38:      {
 39:          get
 40:          {
 41:              return this.GetValue<int> ("CODE");
 42:          }
 43:          set
 44:          {
 45:              this["CODE"] = value;
 46:          }
 47:      }
 48:   
 49:      /// <summary>
 50:      /// 名称。
 51:      /// </summary>
 52:      [Column("NAME","名称")]
 53:      public string Name
 54:      {
 55:          get
 56:          {
 57:              return this.GetValue<string> ("NAME");
 58:          }
 59:          set
 60:          {
 61:              this["NAME"] = value;
 62:          }
 63:      }
 64:   
 65:      /// <summary>
 66:      /// 排序码 。
 67:      /// </summary>
 68:      [Column("SORTCODE","排序码")]
 69:      public int SortCode
 70:      {
 71:          get
 72:          {
 73:              return this.GetValue<int> ("SORTCODE");
 74:          }
 75:          set
 76:          {
 77:              this["SORTCODE"] = value;
 78:          }
 79:      }
 80:   
 81:      /// <summary>
 82:      /// 标准码。
 83:      /// </summary>
 84:      [Column("STANDARDCODE","标准码")]
 85:      public string StandardCode
 86:      {
 87:          get
 88:          {
 89:              return this.GetValue<string> ("STANDARDCODE");
 90:          }
 91:          set
 92:          {
 93:              this["STANDARDCODE"] = value;
 94:          }
 95:      }
 96:   
 97:      /// <summary>
 98:      /// 符号。
 99:      /// </summary>
100:      [Column("SYMBOL","符号")]
101:      public string Symbol
102:      {
103:          get
104:          {
105:              return this.GetValue<string> ("SYMBOL");
106:          }
107:          set
108:          {
109:              this["SYMBOL"] = value;
110:          }
111:      }
112:   
113:      /// <summary>
114:      /// 输入码。
115:      /// </summary>
116:      [Column("INPUTCODE1","输入码")]
117:      public string InputCode1
118:      {
119:          get
120:          {
121:              return this.GetValue<string> ("INPUTCODE1");
122:          }
123:          set
124:          {
125:              this["INPUTCODE1"] = value;
126:          }
127:      }
128:   
129:      /// <summary>
130:      /// 输入码 。
131:      /// </summary>
132:      [Column("INPUTCODE2","输入码")]
133:      public string InputCode2
134:      {
135:          get
136:          {
137:              return this.GetValue<string> ("INPUTCODE2");
138:          }
139:          set
140:          {
141:              this["INPUTCODE2"] = value;
142:          }
143:      }      
144:  }
145:   

      以上以不同风格的代码生成方式,在新的对象设计器中都提供了支持,通过生成器解决方案选择选项之中进行不同的选择:

     新的Orm中采用属性标记的方式定义O-R元数据,供提供如下属性:

Column属性

      标记的实体属性之上,用于定义实体属性与数据库字段的关联关系。

PrimaryKey属性

      标记的实体属性之上,用于定义特定的某个列是否为数据库表的主键。

Identity属性

      标记的实体属性之上,用于定义特定的某个列是否为自动增长列。

DefaultValue属性:

      标记的实体属性之上,用于定义特定的某个列的默认值。

DataSize属性

      标记的实体属性之上,用于定义特定的某个列的的数据范围,包含长度及小数位数。

     新的ORM对象DataEntity的CRUD操作和原有Orm实例Entity类似,即采用IOrmAccessor的CRUD操作方法:

 1:  /// <summary>
 2:  /// 读数据实体。
 3:  /// </summary>
 4:  /// <typeparam name="T">实体类型。</typeparam>
 5:  /// <param name="dataEntity">数据实体。</param>
 6:  /// <returns>从数据库读出的数据对象。</returns>
 7:  T Read<T>(DataEntity<T> dataEntity) where T : IDataEntity;
 8:   
 9:  /// <summary>
10:  /// 插入数据实体。
11:  /// </summary>
12:  /// <param name="dataEntity">数据实体。</param>
13:  void Insert<T>(DataEntity<T> dataEntity) where T : IDataEntity;
14:   
15:  /// <summary>
16:  /// 修改数据实体?。
17:  /// </summary>
18:  /// <param name="dataEntity">数据实体。</param>
19:  void Update<T>(DataEntity<T> dataEntity) where T : IDataEntity;
20:   
21:  /// <summary>
22:  /// 删除数据实体?。
23:  /// </summary>
24:  /// <param name="dataEntity">数据实体?。</param>
25:  void Delete<T>(DataEntity<T> dataEntity) where T : IDataEntity;
26:   

     以及实体基类DataEntity<T>所提供的CRUD方法:

 1:  /// <summary>

 2:  /// 刷新当前数据对象ó。
 3:  /// </summary>
 5:  void Refresh();
 6:   
 7:  /// <summary>
 8:  /// 刷新当前数据对象。
 9:  /// </summary>
11:  void Read();
12:   
13:  /// <summary>
14:  /// 保存当前数据对象。
15:  /// </summary>
17:  void Save();
18:   
19:  /// <summary>
20:  /// 插入当前数据对象。
21:  /// </summary>
23:  void Insert();
24:   
25:  /// <summary>
26:  /// 更新当前数据对象。
27:  /// </summary>
29:  void Update();
30:   
31:  /// <summary>
32:  /// 从数据库中删除当前数据对象ó。
33:  /// </summary>
35:  void Delete();
36:   

     Orm之中的除CRUD之后的很大一部业务是数据的查询服务,AgileEAS.NET平台中对于新的Orm对象DataEntity提供了两种数据查询实现,第一种查询实现方法是采用原有Orm技术中的查询思想,采用动态组合生成的查询条件树进行数据查询,DataEntity<T>之中定义了如下数据选择操作:

1:  /// <summary>
2:  /// 实体查询。
3:  /// </summary>
4:  /// <param name="condition">数据查询条件。</param>
5:  /// <returns>数据实体集合。</returns>
6:  public static IList<T> Select(Condition condition);

     同时在新的Orm技术之增加了对Linq技术的实现,大大的方便了数据查询的操作,有关于这部分内容,我将会在下一篇文章中给大家详细的介绍。

下载说明

     有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载

CallHot 写过一个系列的基于AgileEAS.NET平台的开发案例,请大家通过AgileEAS.NET平台开发Step By Step系列-药店系统-索引AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引AgileEAS.NET平台开发实例-药店系统-视频教程系列-索引一系列文章进行下载。

如何联系

     如果您在使用AgileEAS.NET开发平台中有什么问题,请使用如下几种联系方式或者沟通方式。

1、官方网站:

     AgileEAS.NET平台:http://www.smarteas.net/

     敏捷软件工程实验室:http://www.agilelab.cn/

2、AgileEAS.NET平台交流群:

     AgileEAS.NET平台交流群:120661978(超级群)[新建]
     AgileEAS.NET平台交流群:125643764(高级群)[新建]
     AgileEAS.NET平台交流群:147168308(高级群)[新建]

3、系统架构交流群:

     系统架构交流群:9105332(高级群)(已满)
     系统架构交流群1:124825459(高级群)(已满)
     系统架构交流群2:49124441(高级群)(已满)
     系统架构交流群3:47025564(高级群)(已满)

链接

AgileEAS.NET平台开发指南-文章索引

AgileEAS.NET应用开发平台介绍-文章索引

AgileEAS.NET平台应用开发教程-案例计划

时间: 2024-09-14 02:25:58

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ORM体系的改进与ORM的新成员的相关文章

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 文章汇总及学习指南

一.AgileEAS.NET平台简介 AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的,AgileEAS.NET应用开发平台包含基础类库.资源管理平台.运行容器.开发辅助工具等四大部分,资源管理平台为敏捷并行开发提供了设计.实现.测试等开发过程的并行. AgileEAS.NET平台基于软件过程改进以及构件化快速开发两方面达到这方面的目标,在软件过程改进实践方面,提出了独有的

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 5.0 简介

AgileEAS.NET简介  AgileEAS.NET平台(简称EAS.NET平台)是以"敏捷并行开发方法"为其过程指导思想.基于Microsoft .Net构件技术和模型驱动架构的企业级快速开发平台,AgileEAS.NET使的构建企业级分布式应用系统变得简单,它提供了可灵活扩展应用架构,并且革命性的改变了软件的生产方式,用于帮助中小型软件企业建立一条适合快速变化的开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的. AgileEAS.NET介绍 AgileEAS.

基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET 4.0 简介

介绍       AgileEAS.NET应用开发平台,简称EAS.NET,是基于敏捷并行开发思想以及.NET构件技术而开发的一个应用系统快速开发平台,用于帮助中小型软件企业建立一条适合快速变化的开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的,AgileEAS.NET应用开发平台包含基础类库.资源管理平台.运行容器.开发辅助工具等四大部分,资源管理平台为敏捷并行开发提供了设计.实现.测试等开发过程的并行,基于AgileEAS.NET平台的应用系统的各个业务功能子系统,在系统体

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - Linq 2 EAS.NET,Orm支持Linq

     前面的文章AgileEAS.NET 4.0重构裁剪,新的ORM.支持Linq,正式支持WPF,开放更多的接口简单的介绍了一下AgileEAS.NET平台在2011年初的一些重大改进措施,其他涉及到有关于Orm体系的改进以及对linq的支持,AgileEAS.NET 快速平台之ORM体系的改进与ORM的新成员一文中对Orm的改进做了介绍,本文将详细的给大家介绍这AgileEAS.NET平台中Orm对Linq技术的支持.   Linq介绍:      LINQ是Language Integ

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 关于AgileEAS.NET的一些补充说明

       首先,关于支持.NET Framework 版本问题;AgileEAS.NET最初是基于.net1.1的,目前网上能看到的基于早期版本的只有租吧二手房交易软件和售楼软件,之后2007年开始转移到net2.0版本,到目前为止,基于.net2.0,或许有人说,是否可以考虑基于.net3.5,.net4.0,这个就目前情况来说,还是基于.net2.0,因为对于企业管理信息系统来讲.net2.0足够了,我所熟悉的很多.net应用都是基于2.0版本,当然在以后我会根据需要增加.net4.0版

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 系列目录

      AgileEAS.NET应用开发平台最博客园最早的一篇介绍是2010年4月19号发的,随后也陆续发布了一些相关的介绍和应用的文章,最近差不多也一个多用不写了,主要原因是想着平台发布之后再继续写.       AgileEAS.NET平台定在本月内发布,到时间我会发布完整的开发包,包含所有程序集,类库参考手册,开发指南及相关文档,完整的开发例子,初次发布的管理和运行环境支持SQLServer/2000/2005/2008/oracle10/11数据库支持.       本文的主要目的是

基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET - 敏捷并行开发方法

      首先声明,此并行开发非指并行计算,而是指实践软件工程所总结的一些心得和做法.       敏捷并行开发方法,是利用软件构件技术等技术,以及平台+插件化开发技术整合而出的一种快速开发模式:并行是指产品在生命周期内,项目管理过程.项目研发过程和机构支撑过程"并行"开展,项目研发过程中各个阶段有限度"并行"开展. 并行开发       在传统的瀑布开发模式下,同一软件的多个阶段是顺序地被开发出来的,也就是说第一阶段全部开发结束后才开始第二阶段的开发:同样,等第

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 4.0 最新发布版本 -下载使用说明

一.AgileEAS.NET发布包内容界面 在前些时间,我们对AgileEAS.NET平台平台进行了一次重构,进程序集进行了合并和裁剪,也发布一个基于新版AgileEAS.NET平台的SAAS结构的案例-AgileEAS.NET平台开发实例-药店系统-快速的SAAS开发体验,但一直没有向大家提供最新版本的下载和详细的介绍. AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的,

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ORM设计器

      AgileEAS.NET平台做为一个快速应用开发平台,其目的为是为了提高应用软件的生产效率,如何软件开发的生产效率,方法是多种多样的:使用工作简化开发中低技术重复工作可以是一种行之有效的途径.       在AgileEAS.NET平台中,我们提供了一个集数据库设计.代码生成.DDL定义与一体的数据实体设计器:       在早期的AgileEAS.NET版本中包含一个代码生成器,用于根据现在数据库生成ORM代码,后来的思路是想介入项目的数据库设计环节,所以设计了这么一个数据对象设计

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 账户与角色

      前面的文章我介绍了AgileEAS.NET平台关于模块插件的集成,本文我介绍AgileEAS.NET平台中的一个重要功能,账户和角色.       做为一个企业级应用开发平台,我们应该包括账户管理,做为一个插件集成平台,我们应该包括模块插件的权限管理,而权限系统,也必须依赖于插件和系统使用者(也就是账户和角色).       AgileEAS.NET参考了Windows系统的用户管理机制,Windows设置了用户和用户组,用户组是用户的组合,主要用于权限的设定,AgileEAS.NE