亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

NHibernate Step by Step (一) Hello,NHibernat

系統 2116 0

NHibernate Step by Step (一) Hello,NHibernate!
好了,今天我們正式開始NHibernate的歷程,在第一次的練習中,我將盡量詳細地講解環境的配置,以后將不再詳細解釋。

基本的軟件環境如下:
1.NHibernate www.nhibernate.org 當前版本是1.0.2
2.Code Smith http://www.codesmithtools.com/
3.NHibernate模板 點擊這里下載
當然,少不了VS2005跟SQLServer了,我這里用的是SQLServer2005,教程用在SQLServer2000上應該沒有問題,默認情況下,我將建立并使用一個叫NHibernate的數據庫。

首先,我們先建立一個最簡單的Person表,如下完整腳本(你可以進行修改以適合自己的數據庫):

USE[NHibernate]
GO
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_PADDINGON
GO
CREATETABLE[dbo].[Person](
[id][
int ]IDENTITY( 1 , 1 )NOTNULL,
[name][varchar](
50 )COLLATEChinese_PRC_CI_ASNOTNULL,
CONSTRAINT[PK_Person]PRIMARYKEYCLUSTERED
(
[id]ASC
)WITH(IGNORE_DUP_KEY
= OFF)ON[PRIMARY]
)ON[PRIMARY]

GO
SETANSI_PADDINGOFF

僅有兩個字段,一個自動增長的id,一個name,如下:
NHibernate Step by Step (一) Hello,NHibernate!

然后將下載的nhibernate-template解壓,打開Code Smith,將模板加入”Template Explorer”,如下:
NHibernate Step by Step (一) Hello,NHibernate!

然后在其中的NHibernate.cst上點右鍵,選擇“Execute”,彈出設置窗口,在左邊的屬性窗口進行如下設置:
NHibernate Step by Step (一) Hello,NHibernate!

注 意:SourceDatabase屬性在第一次選擇時需要配置一個連接字符串,配置好后Code Smith將記錄下來。 Assembly屬性代表的是生成文件的默認Assembly名,而NameSpace,顧名思義,就是使用的命名空間了,這里我們全部使用” Test.Model”,請記住這個名字,點擊左下角的Generate,將會在指定的輸出目錄下產生兩個文件:Person.cs, Person.hbm.xml。

好了,NHibernate需要的類文件和映射文件生成完了,我們可以開始干活了!(生成NHibernate文件均是如此步驟,以后不再贅述)

新建立一個類庫工程,為了簡潔起見,我們命名為Model,需要注意的是,為了跟剛才生成的文件對應,我們需要在Model工程的屬性頁中將起Assembly名字設為上面的“Test.Model”,如下:
NHibernate Step by Step (一) Hello,NHibernate!

然 后將剛才生成的兩個文件Person.cs和Person.hbm.xml加入到Model工程中來,選中Person.hbm.xml文件,在屬性窗口 中將其“Build Action”設置為“Embedded Resource”(這是非常重要的一步,否則NHibernate將無法找到映射文件),如下:
NHibernate Step by Step (一) Hello,NHibernate!

build,ok,通過。

然后建立一個控制臺工程,命名為Console1,添加NHibernate和上面Model項目的引用,另外添加一個應用程序配置文件,如下:

<? xmlversion="1.0"encoding="utf-8" ?>
< configuration >
< configSections >
< section name ="nhibernate" type ="System.Configuration.NameValueSectionHandler,System,
Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
/>
</ configSections >

< nhibernate >
< add key ="hibernate.connection.provider" value ="NHibernate.Connection.DriverConnectionProvider" />
< add key ="hibernate.connection.driver_class" value ="NHibernate.Driver.SqlClientDriver" />
< add key ="hibernate.connection.connection_string" value ="Server=localhost;InitialCatalog=NHibernate;IntegratedSecurity=SSPI" />
< add key ="hibernate.connection.isolation" value ="ReadCommitted" />
< add key ="hibernate.dialect" value ="NHibernate.Dialect.MsSql2000Dialect" />
</ nhibernate >

</ configuration >


然后編寫如下代碼:

using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using Test.Model;

namespace Console1
{
class Program
{
static void Main( string []args)
{
Configurationconfig
= new Configuration().AddAssembly( " Test.Model " );
ISessionFactoryfactory
= config.BuildSessionFactory();
ISessionsession
= factory.OpenSession();

Personperson
= new Person();
person.Name
= " JackieChan " ;

ITransactiontrans
= session.BeginTransaction();
try
{
session.Save(person);
trans.Commit();
Console.WriteLine(
" InsertSuccess! " );
}

catch (Exceptionex)
{
trans.Rollback();
Console.WriteLine(ex.Message);
}

}

}

}


運行,ok,執行成功!!
我們到數據庫檢查一下,如下:


我們想要添加的記錄已經成功加入到數據庫中!!
是不是感覺有些神奇啊?好,我們開始詳細解釋。
先來看生成的兩個文件,第一個是Person.cs,如下:

using System;
using System.Collections;

namespace Test.Model
{
Person #region Person

/**/ /// <summary>
/// PersonobjectforNHibernatemappedtable'Person'.
/// </summary>

public class Person
{
MemberVariables #region MemberVariables

protected int _id;
protected string _name;

#endregion


Constructors #region Constructors

public Person() {}

public Person( string name)
{
this ._name = name;
}


#endregion


PublicProperties #region PublicProperties

public int Id
{
get { return _id;}
set {_id = value;}
}


public string Name
{
get { return _name;}
set
{
if (value != null && value.Length > 50 )
throw new ArgumentOutOfRangeException( " InvalidvalueforName " ,value,value.ToString());
_name
= value;
}

}




#endregion

}

#endregion

}


你可以發現,這完全是一個普通的poco類(Plain Old CLR Object),僅僅是對數據庫person表的一個完全映射,不依賴于任何框架,可以用來作為持久化類,你可以在任何地方使用而不用擔心依賴于某些神秘的運行時東西。

另 外,NHibernate需要知道怎樣去加載(load)和存儲(store)持久化類的對象。這正是NHibernate映射文件發揮作用的地方。映射 文件告訴NHibernate它應該訪問數據庫(database)里面的哪個表(table)及應該使用表里面的哪些字段(column),這就是我們 今天要講的重點了,Person.hbm.xml,如下:

<? xmlversion="1.0"encoding="utf-8" ?>
< hibernate-mapping xmlns ="urn:nhibernate-mapping-2.0" >
< class name ="Test.Model.Person,Test.Model" table ="Person" >
< id name ="Id" type ="Int32" unsaved-value ="0" >
< column name ="id" sql-type ="int" not-null ="true" unique ="true" index ="PK_Person" />
< generator class ="native" />
</ id >
< property name ="Name" type ="String" >
< column name ="name" length ="50" sql-type ="varchar" not-null ="true" />
</ property >
</ class >
</ hibernate-mapping >


不用說,最頂層的hibernate-mapping節點是NHibernate用來進行映射的根了,其中,包含一個class節點,里面的name屬性對應我們的Person類,注意,需要完整的限定名;而table屬性,則顯而易見是對應數據庫中的Person表了。
我 們再往里面看,分別有兩個節點,一個是id,對應數據庫中的id,一個是屬性name,對應表中的column name和Person類中的name屬性,整個映射文件簡捷明了,一看即知。實際上這是由代碼產生工具產生的映射文件,里面很多東西我們其實可以省略, 如下寫法:
<property name=”Name” column=”name” />
NHibernate將自動去匹配數據庫中的列而不需要我們來設置。

下面,我們來看一下應用程序配置文件中都記錄了那些東西,如下:
hibernate.connection.provider_class
定制IConnectionProvider的類型.
例 如:full.classname.of.ConnectionProvider (如果提供者創建在NHibernate中), 或者 full.classname.of.ConnectionProvider, assembly (如果使用一個自定義的IConnectionProvider接口的實現,它不屬于NHibernate)。

hibernate.connection.driver_class
定制IDriver的類型.
full.classname.of.Driver (如果驅動類創建在NHibernate中), 或者 full.classname.of.Driver, assembly (如果使用一個自定義IDriver接口的實現,它不屬于NHibernate)。

hibernate.connection.connection_string
用來獲得連接的連接字符串.

hibernate.connection.isolation
設置事務隔離級別. 請檢查 System.Data.IsolationLevel 來得到取值的具體意義并且查看數據庫文檔以確保級別是被支持的。
例如: Chaos, ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Unspecified

hibernate.dialect
NHibernate方言(Dialect)的類名 - 可以讓NHibernate使用某些特定的數據庫平臺的特性
例如: full.classname.of.Dialect(如果方言創建在NHibernate中), 或者full.classname.of.Dialect, assembly (如果使用一個自定義的方言的實現,它不屬于NHibernate)。

接著,我們開始解釋代碼的執行,如下:

Configurationconfig = new Configuration().AddAssembly( " Test.Model " );

// 通過配置對象來產生一個SessionFactory對象,這是一個Session工廠,
// 那么Session是用來干什么的呢?一個Session就是由NHibernate封裝
// 的工作單元,我們可以近似地認為它起到ADO.Net中Connection的作用。
ISessionFactoryfactory = config.BuildSessionFactory();
ISessionsession
= factory.OpenSession();

Personperson
= new Person();
person.Name
= " JackieChan " ;

// 這里,開啟一個由NHibernate封裝的事務,當然,在這里最終代表
// 的還是一個真實的數據庫事務,但是我們已經不需要再區分到底是
// 一個SqlTransaction還是一個ODBCTransaction了
ITransactiontrans = session.BeginTransaction();
try
{
// 保存,提交,就這么簡單!!
session.Save(person);
trans.Commit();
Console.WriteLine(
" InsertSuccess! " );
}

catch (Exceptionex)
{
trans.Rollback();
Console.WriteLine(ex.Message);
}


現在有了一個基本的概念了吧??
好了,第一篇就講這么多,我們下次再接著練習。

Step by Step,顧名思義,是一步一步來的意思,整個教程我將貫徹這一理念,待此系列結束后,我們再就某些高級話題進行深入。
任何建議或者批評,請e: abluedog@163.com

NHibernate Step by Step (一) Hello,NHibernate!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎永久在线视频 | 日韩欧美一级毛片精品6 | 久久婷婷国产麻豆91天堂 | 噜噜色图 | 色黄网站成年女人色毛片 | 一级特黄牲大片免费视频 | 国产精品久久久久久久久免费观看 | 日韩性生活视频 | 久久一级片 | 色偷偷91久久综合噜噜噜 | 国产精品视频久 | 99久久中文字幕 | 日本一级在线观看视频播放 | 四虎最新地址 | 韩国日本美国免费毛片 | 国产aaa级一级毛片 国产aaa毛片 | 亚洲精品国产第一区二区三区 | 国产亚洲欧美在在线人成 | 日日日日操 | 亚洲精品美女久久久久 | 亚洲欧洲成人 | 亚洲欧美另类在线 | 亚洲高清在线播放 | 麻豆国产精品高中生视频 | 国产在线观看精品香蕉v区 国产在线观看美女福利精 国产在线观看午夜不卡 | 免费看欧美一级特黄a大片 免费看欧美一级特黄a大片一 | 国产麻豆精品高清在线播放 | 羞羞视频网站在线观看 | 奇米亚洲春色 | 黄色毛片小视频 | 内衣办公室动漫久久影院 | 好吊色青青草 | 中文字幕欧美日韩va免费视频 | 亚洲另类在线视频 | a加勒比一本东京 | 久久精品免看国产 | 日韩三级一区二区 | 福利国产在线 | 日韩一及片 | 精品国产一区二区三区19 | 欧美vs日韩vs国产在线观看 |