使用步驟
1. 建立庫表
2. 建立映射對象
3. 建立映射文件
4. 編寫配置文件
5. 編寫程序
詳細說明
1. 建立庫表
庫: test
表: userinfo
字段:uid char(10), pwd char(20) uid為主鍵
2. 建立映射對象
using System;
namespace testNHibernate
{
/// <summary>
/// UserInfo 的摘要說明。
/// </summary>
public class UserInfo
{
#region 域
private string _userName;
private string _password;
#endregion
#region 屬性
public string userName
{
get
{
return _userName;
}
set
{
_userName = value;
}
}
public string password
{
get
{
return _password;
}
set
{
_password = value;
}
}
#endregion
#region 方法
public UserInfo()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
#endregion
}
}
3. 建立映射文件
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="testNHibernate.UserInfo, testNHibernate" table="userinfo">
<id name="userName" column="uid" type="String" length="10">
<generator class="assigned" />
</id>
<property name="password" column="pwd" type="String" length="20"/>
</class>
</hibernate-mapping>
說明:class元素中的class與hibernate中有些不同,除了名字空間,類名外,後面有個集合名,這個集合名不能隨便寫,一般寫名字空間就可以了。具體有什麼限制查找中。
4. 編寫配置文件
在web.config或app.config中加入
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<nhibernate>
<add
key="hibernate.show_sql"
value="true"
/>
<add
key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"
/>
<add
key="hibernate.dialect"
value="NHibernate.Dialect.MsSql2000Dialect"
/>
<add
key="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"
/>
<add
key="hibernate.connection.connection_string"
value="Server=127.0.0.1;initial catalog=test;User=sa;Password=1234"
/>
</nhibernate>
<log4net debug="false">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<param name="File" value="Blueblog.log" />
<param name="datePattern" value="MM-dd HH:mm" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[blueblog] %-5p [%t] %d %C{1}.%M(%L) | %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
說明:log4net的配置並不是必須的。NHibernate的配置中,只有connection_string需要自己調整,看到網上的一些例子用SPPI登錄,實驗了多次沒有成功,在使用用戶名時,不要用User ID=xxx 中間一個空格會被不識別。直接用User就可以了。
加上log4net是很好的習慣,NHibernate的一些運行都會被記錄在日志中。有些錯誤就可以看到。便於解決問題。
5. 編寫程序
log4net.ILog log = log4net.LogManager.GetLogger(this.GetType());
try
{
Configuration cfg = new Configuration();
cfg.AddAssembly("testNHibernate");
cfg.AddXmlFile("C://Inetpub//wwwroot//testNHibernate//UserInfo.hbm.xml");
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
//ITransaction trans = session.BeginTransaction();
UserInfo user = new UserInfo();
user.userName = "yfpeng6";
user.password = "yfpeng";
session.Save(user);
//trans.Commit();
session.Flush();
session.Close();
}
catch(Exception ex)
{
Response.Write("<p>" + ex.Message);
log.Error(ex.Message);
}
說明:具體的操作和hibernate相同,只是下面兩句
cfg.AddAssembly("testNHibernate");
cfg.AddXmlFile("C://Inetpub//wwwroot//testNHibernate//UserInfo.hbm.xml");
在我的這次測試中,nhibernate並沒有在配置文件中把hbm寫入其中。而是在這一一加載。(但我想應該也在在配置文件中加載的方法,測試中)。還有AddAssmbly參數為映射文件中class後面的那個集合,具體為什麼這樣還是不太明白。
6. 總結
編寫這個測試程序時,遇到不少問題,主要是配置和hibernate有些不同。
在庫文件中要有
Iesi.Collections.dll
HashCodeProvider.dll
這兩個文件。不用引用到程序。但nhibernate會使用到。
將他們放在nhibernate相同的目錄下就可以了,系統會尋找後拷貝到bin/debug/下面。當然直接放進去也可以。
另外在配置文件中,主鍵要寫成
<generator class="assigned" />
否則主鍵會加不進去