欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

NHibernate Step by Step (一) Hello,NHibernat

系統 2177 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條評論
主站蜘蛛池模板: 亚洲第一区精品观看 | 国产一区二区久久 | 日日夜夜天天久久 | 99成人精品视频 | 国产亚洲精品久久久久久国模美 | 国产美女一区二区 | 91免费播放| 亚洲精品久久视频 | 奇米4色 | 久久久久久久久久久久久久久久久久久 | 视频成人永久免费视频 | 国产精品福利在线观看免费不卡 | 免费播放春色aⅴ视频 | 91精品在线播放 | 国产做国产爱免费视频 | 波多野结衣 久久 | 成人1234 | 毛片毛片毛片毛片毛片毛片 | 国产精品你懂的在线播放 | 成人免费无毒在线观看网站 | 亚洲特黄 | 欧美国产一区二区三区 | 色大18成网站www在线观看 | 蜜桃视频一区二区三区 | 亚洲精品成人 | 欧美日韩视频在线 | 日本一级毛片视频 | 欧美一区二区三区在线看 | 热灸灸这里只有精品 | 国产精品亚洲片在线va | 2021成人国产精品 | 中文字幕亚洲综合久久2 | 成年网站视频在线观看 | 欧美黑人性受xxxx喷水 | 色玖玖综合 | 欧美一级艳片视频免费观看 | 色图综合网 | 久久精品中文 | 亚洲精品乱码久久久久久v 国产高清免费视频 | 韩国久久久久无码国产精品 | 免费国产午夜在线观看 |