分享
 
 
 

NHibernate源代码浅读 1

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

NHibernate源代码浅读 1

曾经了解过Hibernate, 印象很深,是个很不错得O/R Mapping FW. 在http://nhibernate.sourceforge.net/上有个从Java移植过来得.NET版本--NHibernate(以下称NH),不过目前还处于PreAlpha Build 2阶段.

出于兴趣以及学习.NET得目的, 花了两天仅看了很小一部分代码:一来源代码注释并不丰富,二来对于Hibernate/NHibernate的使用也很不熟悉,三来有些知识点还不熟悉.

准备工作如下:

1. NHibernate PreAlpha Build 2

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 ();

}

}

}

(嘿嘿, 电影Down刚完, 休息一下了 明天将随着Test Case的每一步,看看NH中到底发生了什么)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有