曾经了解过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 如下:
 

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

可以看出以上是一个标准得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)
 

NHibernate学习第一天(数据的写入 Insert)using System;
NHibernate学习第一天(数据的写入 Insert)
namespace Argus.Monitoring
这是一个被极度简化的类,省略了Member Method,甚至Property的set方法,因为我打算先试试Insert功能,然后再尝试Load功能
 
5. 写一个该BO对应的最简单的映射文件
 

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

6. 最后一步 (好累啊~~~), TestCase:
 
NHibernate学习第一天(数据的写入 Insert)using System;
NHibernate学习第一天(数据的写入 Insert)
NHibernate学习第一天(数据的写入 Insert)
using NUnit.Framework;
NHibernate学习第一天(数据的写入 Insert)
NHibernate学习第一天(数据的写入 Insert)
using NHibernate;
NHibernate学习第一天(数据的写入 Insert)
NHibernate学习第一天(数据的写入 Insert)
using Argus.Monitoring;
NHibernate学习第一天(数据的写入 Insert)
NHibernate学习第一天(数据的写入 Insert) 
NHibernate学习第一天(数据的写入 Insert)
NHibernate学习第一天(数据的写入 Insert)
namespace Test.Monitoring 
NHibernate学习第一天(数据的写入 Insert)
}

相关文章:

  • 2021-11-13
  • 2022-01-04
  • 2022-01-25
  • 2021-05-27
  • 2021-04-02
  • 2021-06-04
  • 2022-12-23
  • 2021-06-30
猜你喜欢
  • 2021-09-18
  • 2021-07-29
  • 2021-12-19
  • 2021-12-15
  • 2021-08-06
  • 2021-12-07
  • 2021-09-12
相关资源
相似解决方案