NHibernate学习第一天(数据的写入 Insert)

转自:http://www.cnblogs.com/mack/archive/2004/09/01/38636.aspx

曾经了解过Hibernate, 印象很深,是个很不错得O/R Mapping FW. 在http://nhibernate.sourceforge.net/上有个从Java移植过来得.NET版本--NHibernate(以下称NH),不过目前还处于PreAlpha Build 2阶段.
出于兴趣以及学习.NET得目的, 花了两天仅看了很小一部分代码:一来源代码注释并不丰富,二来对于Hibernate/NHibernate的使用也很不熟悉,三来有些知识点还不熟悉.
准备工作如下:
1. NHibernate
2. NUnit
3. NHibernate配置文件 monitoring.dll.config 如下:

 


<? xml version="1.0" encoding="utf-8" ?>
< configuration >
 
< configSections >
   
< section name ="nhibernate" type = "System.Configuration.NameValueSectionHandler,System,Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 
</ configSections >
 
< nhibernate >
   
< add key ="hibernate.show_sql" value ="false" /> <!-- 设置是否输出SQL语句到Console  -->
   
< add key ="hibernate.connection.provider" value ="NHibernate.Connection.DriverConnectionProvider" />
   
< add key ="hibernate.dialect" value ="NHibernate.Dialect.MsSql2000Dialect" /> <!-- 设置使用SQL Server的方言,毕竟不同DB的SQL有或多或少的区别 -->
   
< add key ="hibernate.connection.driver_class" value ="NHibernate.Driver.SqlClientDriver" /> <!-- 设置使用的DB驱动 -->
   
< add key = "hibernate.connection.connection_string" value ="Server=zephyr;initial catalog= argus;UserID=sa;Password=zephyr;Min Pool Size=2" /> <!-- 设置连接串 -->
 
</ nhibernate >
</ configuration >

可以看出以上是一个标准得Config文件,一般由System.Configuration.ConfigurationSettings.GetConfig方法来读取.
蓝色部分才是真正配置NH的地方, 例子中我配置它使用SQL Server, 那些Key/Value的含义很好明白.
值得注意得是,配置文件得文件名很重要,通常对于一个EXE得Assembly来说,是AssemblyName.Config,不过对于Dll Assembly来,对应的配置文件为AssemblyName.dll.config 例如:
MyAssy.exe -> MyAssy.config
MyAssy.dll -> MyAssy.dll.config
我打算在我的monitoring.dll,一个用来监视性能东东中使用NH来持久化数据. 该类库包含了一个TestCase,由NUnit来调用
4.将要被持久化的对象, 即Business Object(BO)

using System;
namespace Argus.Monitoring
{
    
public class Monitor
    
{
      
//dbID & DBID 是NH必须要求的主键
         private int dbID;
        
public int  DBID{set{dbID=value;}get{return dbID;}}
        
public string MonitorType {get{return "dummy monitor";}}
        
public double Value {get{return 12.34;}
        
public string Category{get{return "this is category";}}
        
public string Name{get{return "this is name";}}
        
public string Instance{get{return "this is instance";}}
        
public string Computer{get{return "this is computer";}} 
      }

}

这是一个被极度简化的类,省略了Member Method,甚至Property的set方法,因为我打算先试试Insert功能,然后再尝试Load功能
5. 写一个该BO对应的最简单的映射文件

<? xml version="1.0" encoding="utf-8" ?>
< hibernate-mapping xmlns ="urn:nhibernate-mapping-2.0" >
 
<!-- 指明BO的全名和所在Assembly的名字以及在数据库中对应的表名 -->
 
< class name ="Argus.Monitoring.Monitor,monitoring" table = "record" >
   
< id name ="DBID" type ="Int32" >
     
< generator class ="identity" /> <!-- 在数据库表中 ID列设成自动加一的主键 -->
   
</ id >
   
<!-- 若不设column属性,则默认BO中属性名称和表中字段名一致,若不指明type,则通过反射BO的属性来得到列的数据类型 -->
   
< property name ="Computer" type ="String(50)" />
   
< property name ="Category" type ="String(50)" />
   
< property name ="Name" column ="counter" type ="String(50)" />
   
< property name ="Instance" type ="String(50)" />
    
<!-- 此处BO的Value属性被映射到data列 -->
   
< property name ="Value" column ="data" type ="Double" />
   
< property name ="MonitorType" type ="String(50)" />
 
</ class >
</ hibernate-mapping >

6. 最后一步 (好累啊~~~), TestCase:
 
using System;

using NUnit.Framework;

using NHibernate;

using Argus.Monitoring;



namespace Test.Monitoring

{

      

     [TestFixture]

    
public class MonitoringTest

    
{

         [Test]
public void NHibernateTest ()

        
{

              Argus.Monitoring.Monitor m
=new Argus.Monitoring.Monitor ();

              NHibernate.Cfg.Configuration cfg
=new NHibernate.Cfg.Configuration ();

              cfg.AddXmlFile (
"Argus.Monitoring.Monitor.hbm.xml");

              ISession session
= cfg.BuildSessionFactory ().OpenSession();

              session.Save (m);

              session.Close ();

         }


     }


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值