LinKejian's blog in cnbolgs

导航

(三)NHibernate QuickStart:一气呵成的单对象持久化

概述:
    写完了(二)NHibernate QuickStart:单个对象与单个数据表的持久化 ,我都很郁闷,诚然NHibernate减少了很多ADO.NET的操作,但是编写hbm.xml文件和DDL脚本还需要手工的去做。
    一次还好,需求改变了这么办?比如对象增加了一个属性,还要改hbm.xml ,DDL这两个文件;hbm.xml文件写错了怎么办?这个映射文件的格式还是太麻烦。这些多出来的工作量好像不比写点ADO.NET少,有什么办法可以让系统自动的去干这些多出来的事吗?

    还好,NHibernate提供了一套完整的办法来干这些多出来的事,一起看一下:
    相关工程文件:AutoSimpleClass.rar (22KB)

原则:
1  编写业务类,在属性上加上O/R标签
2  自动生成hbm.xml文件和DDL文件
3  将生成的文件加入到项目中

步骤:
1 创建一个类库项目:AutoSimpleClass
2 将默认的类Class1.cs 改为 Cat.cs
3 在项目中引用以下组件:
  NUnit.Framework.dll
  NHibernate.dll
  NHibernate.Mapping.Attributes.dll

4 在Cat.cs中引用NHibernate.Mapping.Attributes,并添加属性:
Cat.cs


5 在每个属性上增加数据表的对应关系
    //定义对应的表
    [Class(NameType = typeof(Cat), Table = "Cat")]
    
public class Cat
    
{
        
private


        
public Cat()
        
{

        }


        
//定义主键
        [Id(0, Name = "ID", TypeType = typeof(int), Column = "Id", UnsavedValue = "0")]
        [Key(
1)]
        [Generator(
2, Class = "identity")]
        
public virtual string Id
        
{
            
get
            
{
                
return id;
            }

            
set
            
{
                id 
= value;
            }

        }


        
//定义一般字段
        [PropertyAttribute(Column = "Name", Length = 50, TypeType = typeof(String))]
        
public virtual string Name
        
{
            
get
            
{
                
return name;
            }

            
set
            
{
                name 
= value;
            }

        }


        
//定义一般字段
        [PropertyAttribute(Column = "Sex" , TypeType = typeof(Char))]
        
public virtual char Sex
        
{
            
get
            
{
                
return sex;
            }

            
set
            
{
                sex 
= value;
            }

        }


        
//定义一般字段
        [PropertyAttribute(Column = "Weight", TypeType = typeof(float))]
        
public virtual float Weight
        
{
            
get
            
{
                
return weight;
            }

            
set
            
{
                weight 
= value;
            }

        }


    }


 

利用HbmGenerator.cs 包含的两个测试用例生成hbm.xml和DDL文件
   代码不贴了,自己下,解压后注意修改命名空间。
   结果如下:
         


7  将生成的文件添加到项目中,记得将xml文件作为嵌入的资源编译到程序集中

8  如果需要生成其它类的映射文件和数据库脚本,修改所有的Cat为你需要的业务类后,执行一遍单元测试即可。


9  什么? 要改的地方太多了,好吧,参考HbmGenerator_Reflection.cs ,利用了一下反射,只需要改一个地方就可以了。

public class HbmGenerator_Reflection
    
{
      
        
private string FullBusinessClassName = "AutoSimpleClass.Cat"//修改此处,注意使用全类名,包含命名空间
    }




版本记录:2008 - 1- 6 ,第一版发布






posted on   林克坚  阅读(410)  评论(1编辑  收藏  举报

努力加载评论中...
点击右上角即可分享
微信分享提示