日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

基于NHibernate的三层结构应用程序开发初步

發布時間:2025/7/14 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于NHibernate的三层结构应用程序开发初步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文并不是去詳細的介紹如何使用NHibernate,而是通過一個簡單的例子來演示基于NHibernate的三層結構應用程序開發過程。關于NHibernate的有關文檔,DDL已經做了漢化,但是由于英文文檔自身就不完善,所以漢化后也是不全。菩提樹在一篇《NHibernate學習之路》隨筆中談到了學習NHibernate遇到的困難,也希望大家把自己在使用NHibernate中的經驗和心得能夠共享出來,與大家分享。另外我也是剛開始接觸NHiernate,有錯誤之處還請大家指點。

第一步:準備數據表

在這里用一個最簡單的例子,有一張關于的用戶的表,有編號,姓名,密碼,Email地址和最后一次的登錄時間幾個字段。

Create Table Users(

??? LogonID varchar(20) Primary key,

??? Name varchar(40),

??? Password varchar(20),

??? EmailAddress varchar(40) ,

??? LastLogon datetime

)

第二步:創建需要被持久化的類

在.NET中創建一個NHibernateWebDemo.Model的工程,添加User實體類。

//User.cs

using System;

namespace NHibernateWebDemo.Model

{

public class User

{

public User()

{???

??????? }

private string id;

private string userName;

private string password;

private string emailAddress;

private DateTime lastLogon;

public string Id?

{

get { return id; }

set { id = value; }

??????? }

public string UserName?

{

get { return userName; }

set { userName = value; }

??????? }

public string Password?

{

get { return password; }

set { password = value; }

??????? }

public string EmailAddress?

{

get { return emailAddress; }

set { emailAddress = value; }

??????? }

public DateTime LastLogon?

{

get { return lastLogon; }

set { lastLogon = value; }

??????? }

??? }

}

第三步:創建持久化映射文件

該文件的命名為User.hbm.xml,并且與User.cs放在同一個目錄里。設置該文件的生成操作屬性為“嵌入的資源”,這一點要切記。另外,使用編號當作主鍵,由用戶輸入,所以在映射文件中用assigned。

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">

<class name="NHibernateWebDemo.Model.User, NHibernateWebDemo.Model" table="users">

<id name="Id" column="LogonId" type="String" length="20">

<generator class="assigned" />

</id>

<property name="UserName" column= "Name" type="String" length="40"/>

<property name="Password" type="String" length="20"/>

<property name="EmailAddress" type="String" length="40"/>

<property name="LastLogon" type="DateTime"/>

</class>

</hibernate-mapping>

第四步:進行配置文件的設置

在配置文件中,我們要告訴NHibernate所使用的數據庫是什么,以及如何連接該數據庫。

<configSections>

<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />

</configSections>

<nhibernate>

<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=.;uid=sa;pwd=sa;database=test"/>

</nhibernate>

第五步:編寫數據訪問層的公用類

在這里,編寫了兩個公用的類,分別進行Session的創建和實體的操作。在這兩個類中用單件模式,來限制Session的創建。為了做到與具體的應用程序無關,在這里把程序集的名稱作為參數,傳遞給OpenSession()方法。可以把這兩個類單獨放在一個名為Common的工程下,這里先把它們放在DAL層中。這兩個類只是個人的一種寫法,大家可以自行去編寫。

//SessionFactory.cs

using System;

using System.Reflection;

using System.Data;

using NHibernate;

using NHibernate.Cfg;

using NHibernate.Tool.hbm2ddl;

namespace NHibernateWebDemo.DAL

{

public class SessionFactory

{

public SessionFactory()

{



??????? }

private static ISessionFactory sessions;

private static Configuration cfg;

static readonly object padlock = new object();

public static ISession OpenSession(string AssemblyName)

{

if(sessions == null)

{

lock(padlock)

{

if(sessions == null)

{

??????????????????????? BuildSessionFactory(AssemblyName);

??????????????????? }

??????????????? }

??????????? }

return sessions.OpenSession();

??????? }

private static void BuildSessionFactory(string AssemblyName)

{

??????????? cfg = new Configuration();

??????????? cfg.AddAssembly(AssemblyName);

??????????? sessions = cfg.BuildSessionFactory();

??????? }

??? }

}

//EntityControl.cs

using System;

using System.Collections;

using NHibernate;



namespace NHibernateWebDemo.DAL

{

public class EntityControl

{

private static EntityControl entity;

private string _AssemblyName;

static readonly object padlock = new object();

public static EntityControl CreateEntityControl(string AssemblyName)

{

if(entity == null)

{

lock(padlock)

{

if(entity == null)

{

??????????????????????? entity = new EntityControl();

??????????????????????? entity._AssemblyName = AssemblyName;

??????????????????? }

??????????????? }

??????????? }

return entity;

??????? }

public void AddEntity(Object entity)

{

??????????? ISession session = SessionFactory.OpenSession(_AssemblyName);

??????????? ITransaction transaction = session.BeginTransaction();

try

{

??????????????? session.Save(entity);

??????????????? transaction.Commit();

??????????? }

catch(Exception ex)

{

??????????????? transaction.Rollback();

throw ex;

??????????? }

finally

{

??????????????? session.Close();

??????????? }

??????? }

public void UpdateEntity(Object entity,Object key)

{

??????????? ISession session = SessionFactory.OpenSession(_AssemblyName);

??????????? ITransaction transaction = session.BeginTransaction();

try

{

??????????????? session.Update(entity,key);

??????????????? transaction.Commit();

??????????? }

catch(Exception ex)

{

??????????????? transaction.Rollback();

throw ex;

??????????? }

finally

{

??????????????? session.Close();

??????????? }

??????? }

public void DeleteEntity(object entity)

{

??????????? ISession session = SessionFactory.OpenSession(_AssemblyName);

??????????? ITransaction transaction = session.BeginTransaction();

try

{

??????????????? session.Delete(entity);

??????????????? transaction.Commit();

??????????? }

catch(Exception ex)

{

??????????????? transaction.Rollback();

throw ex;

??????????? }

finally

{

??????????????? session.Close();

??????????? }

??????? }

public IList GetEntities(string strHQL)

{

??????????? IList lst;

??????????? ISession session = SessionFactory.OpenSession(_AssemblyName);

??????????? ITransaction transaction = session.BeginTransaction();



??????????? lst=session.Find(strHQL);

??????????? transaction.Commit();

??????????? session.Close();

return lst;

??????? }

??? }

}

第六步:編寫數據訪問層

創建一個名為NHibernateWebDemo.DAL的工程,數據訪問層的代碼編寫非常簡單,在創建EntityControl的實例時,需要把Model的程序集名稱作為參數傳入,可以通過配置文件來避免程序集名稱的硬編碼。

//UserDAL.cs

using System;

using System.Collections;

using NHibernateWebDemo.Model;

namespace NHibernateWebDemo.DAL

{

public class UserDAL

{

private EntityControl control;

public UserDAL()

{

??????????? control = EntityControl.CreateEntityControl("NHibernateWebDemo.Model");

??????? }

public void AddUser(User user)

{

??????????? control.AddEntity(user);

??????? }

public void UpdateUser(User user,string Id)

{

??????????? control.UpdateEntity(user,user.Id);

??????? }

public void DeleteUser(User user)

{

??????????? control.DeleteEntity(user);

??????? }

public IList GetAllUsers(string strHQL)

{

return control.GetEntities(strHQL);

??????? }

??? }

}

第七步:編寫業務邏輯層

建立NHibernateWebDemo.BLL工程,為了簡單期間,在業務邏輯層中我沒有做任何的業務檢測。

//UserBLL.cs

using System;

using System.Collections;

using NHibernateWebDemo.DAL;

using NHibernateWebDemo.Model;

namespace NHibernateWebDemo.BLL

{

public class UserBLL

{

public void AddUser(User user)

{?

??????????? UserDAL dal = new UserDAL();????????

??????????? dal.AddUser(user);

??????? }

public void UpdateUser(User user,string Id)

{

??????????? UserDAL dal = new UserDAL();

??????????? dal.UpdateUser(user,Id);

??????? }

public void DeleletUser(User user)

{

??????????? UserDAL dal = new UserDAL();

??????????? dal.DeleteUser(user);

??????? }

public IList GetAllUsers(string strHQL)

{

??????????? UserDAL dal = new UserDAL();

return dal.GetAllUsers(strHQL);

??????? }

??? }

}

第八步:實現用戶界面

用戶界面很簡單,這里就不給出代碼了,完成后的用戶界面:

轉載于:https://www.cnblogs.com/360S/archive/2011/09/28/2194123.html

總結

以上是生活随笔為你收集整理的基于NHibernate的三层结构应用程序开发初步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。