徐文兵的IT博客

(全力支持博客实名化)

常用链接

统计

积分与排名

Tech WebSite

兄弟连

最新评论

动态获取Nhibernate的ORM配置信息,实现系统历史记录功能

1 问题场景

         系统的数据层采用 Spring.net  框架。

项目对数据的要求

1 每一个业务表的业务信息只能注销,不能物理删除(也就是我们经常说的保存历史数据)

2)不能将表的失效信息暴露在实体类中

 

2 解决流程

  解决的流程

  Step one  通过Session中的SessionFactory 查找到业务实体类的ORM信息

           在这里,我们最关注ORM信息中的有两点

1)   业务实体类  -------- 数据库中表

2)   业务实体类的主键属性 ---数据库中列信息

 

 补充说明:

          在这边我们支持类的映射信息配置的主键主要包含了三个组成方式

        1 类的主键类型为复合主键且子主键为key-property

        2 类的主键类型为复合主键且子键中包含了key-property 也包含了key-many-to-one

        3 类的主键类型直接为property

 

Step Two 根据ORM信息 取对应数据库中表的列 对应的业务实体属性值

        

Step Three  Step Two 提取出来的的信息 转化成我们需要数据格式

     属性                       属性说明

TableName                表名

IdentifierColumnNames      主键对应数据库表中的列名

identifierValues             业务实体中的主键属性值

KeyNum                     主键的列数目

 

Step Four  根据 step three 的信息 拼装SQL语句并执行

 

 

3类的设计

Nhibernate.jpg

 

                             类图

3.1 ClassMappingInfo

功能说明:存储了类和数据库表之间的NHibernate配置信息

 

属性

属性名

属性含义

属性数据类型

TableName

表名

String

IdentifierColumnNames

主键列名

String[]

IdentifierValues

主键对应的对象属性值

String[]

ColumnLength

主键列的数目

Int

 

3.2 ClassMappingInfoBuilder

功能说明:

   根据类和Isession来获取ClassMappingInfo

函数

   public ClassMappingInfo Get(object obj, ISession session)

   参数

      Obj :数据持久类

      SessionNHibernate Session实例

   返回类型  ClassMappingInfo

 

 

 

3.3 DeleteCommandCreater

功能说明:

   根据ClassMappingInfo 映射信息,来生成删除功能的sql语句

函数

   public override string GetSqlCommand()

 

   返回类型 string



 

4 核心代码说明

  下面是核心函数

 参数接口为  业务实体对象的类型 ,业务实体对象,spring.net 中的Session对象

实现的功能是:

   提取业务实体对象的主键信息(包含实体中主键属性值和数据表中的主键列的信息)

 

Code




                    2009/02/18   22:16 徐文兵 于上海
0
0
(请您对文章做出评价)
« 上一篇:Ext学习系列一(JavaScript 对象设计)
» 下一篇:未来五年程序员应当具备的十项技能

posted on 2009-02-18 22:08 徐文兵 阅读(1692) 评论(0)  编辑 收藏 所属分类: 开源组件