第一步:
我們需要NHibernate的程式集:
NHibernate.dll
Log4net.dll
Iesi.Collections.dll
Castle.DynamicProxy.dll
至少四個,其中
NHibernate.dll是核心的程式集,
Log4net.dll是日誌記錄程式集,
Iesi.Collections.dll是集合架構的程式集,
Castle.DynameicProxy.dll控制反轉的程式集
注意:需要同時拷貝4個dll,否則出現類似如下錯誤:未能負載檔案或程式集“Iesi.Collections, Version=1.0.0.3, Culture=neutral”或它的某一個依賴項。為什麼需要載入Iesi?為什麼需要載入log4net?
第二步:
準備持久化類、實體類,它是O/R Mapping的映射對象,通過控制它來封裝我們的資料
第三步:
使用NHibernate的設定檔
在設定檔中指定資料庫的方式,串連資料庫的方式
讓NHibernate知道如何去使用串連資料庫
第四步:
編寫O/R Mapping的對應檔
讓NHibernate知道如何去映射.NET與資料庫之間的關係
最後使用強大的NHibernate來編寫你的程式!
為了讓NHibernate知道如何去串連資料庫,所以你必須在我們.NET中的app.config或者web.config中去配置一下:
<configSections> <!--配置節-->
<section name="nhibernate"
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<!-- 配置資訊用於指定NH以何種方式訪問資料庫-->
<nhibernate>
<!--串連提供者,取值必須是實現了IConnectionProvider介面的類的全名-->
<add key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider" />
<!--資料庫方言,取值必須是繼承之Dialect的類的全名-->
<add key="hibernate.dialect"
value="NHibernate.Dialect.MsSql2000Dialect" />
<!--資料驅動類,取值必須是實現了IDriver介面的類的全名-->
<add key="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver" />
<!--連接字串,取值要與driver_class指定的資料驅動類對應.-->
<add key="hibernate.connection.connection_string"
value="server=(local);uid=sa;pwd=sa;database=dbtest" />
</nhibernate>
製作一個持久化的類:
public class Account //注意必須將屬性設定為virtual虛擬
{
private int id;
virtual public int Id
{
get { return id; }
set { id = value; }
}
private string username;
virtual public string Username
{
get { return username; }
set { username = value; }
}
private string password;
virtual public string Password
{
get { return password; }
set { password = value; }
}
}
編寫每個持久化類的配置
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name=“BE.Account,BE" table="account">
<id name="Id" column="userid" type="Int32">
<generator class="identity" />
</id>
<property name="Username" type="String" length="50"/>
<property name="Password" type="String" length="50"/>
</class>
</hibernate-mapping>
其中xmlns指定了使用NHibernate的版本,
class元素的name屬性指定了持久化類的全名稱,逗號隔開的是程式集的名稱
table屬性指定了對應的資料庫中表名稱
id元素是指定主鍵列名,name屬性是指持久化類的屬性名稱,column是表中列名
property元素是其他的每一列與持久化類的哪個屬性對應
generator元素 中的class屬性指定了是自動成長列
儲存為Account.hbm.xml檔案
下面開始使用NHibernate
using NHibernate;
using NHibernate.Cfg;
Configuration cfg = new Configuration();
cfg.AddAssembly(“BE");
ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
Account a = new Account();
a.Username = “Guilee";
a.Password = "1234";
a.Id = 1;
session.Save(a);
//修改資料庫的內容
//session.Update(a);
//刪除資料庫的內容
//session.Delete(a);
transaction.Commit();
session.Close();
首先,建立一個Configuration對象
Configuration對象能夠解析所有.Net對象和後台資料庫中的映射關係。
Configuration cfg = new Configuration();
cfg.AddAssembly(“BE");
Configuration對象會搜尋裝配件裡的任何以hbm.xml 結尾的檔案。還有其他方法載入對應檔,但這種方式是最簡單的。
建立一個Session對象
ISession對象提供一個到後台資料庫的串連,ITransaction對象提供一個可以被NHibernate管理的事務。
ISessionFactory factory = cfg.BuildSessionFactory(); ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
接著來增/刪/改/查你的對象
現在你可以用使用傳統的.Net方法來操縱對象。
NHibernate將查詢的方式變成了物件導向的方法,針對查詢最簡單的使用方式是:
ICriteria c = session.CreateCriteria(typeof(BEAccount));
c.Add(Expression.Eq("Username",account.Username));
c.Add(Expression.Eq("Password",account.Password));
IList list = c.List();
使用ICriteria 表示一次查詢動作
整個代碼錶示:
查詢Account表,找到username為account.Username並且password為account.Password的所有記錄
使用List來得到所有查詢之後的結果