NHibernate的配置文件app.config
<?xml version="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;Initial Catalog=user;Integrated Security=SSPI" />
<add key="hibernate.connection.isolation" value="ReadCommitted"/>
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
</nhibernate>

<connectionStrings>
<add name="SQLConnString" connectionString="Server = localhost;Initial Catalog=user;Integrated Security=SSPI" />
</connectionStrings>

<appSettings>
<add key="ProjectDAL" value="Kufolin.Foundation.DAL"/>
<add key="ModelAssembly" value="Kufolin.Foundation.Model"/>
</appSettings>
</configuration>
NHibernateHelper类的相关应用:
using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using System.Data;
using System.Data.SqlClient;
using Kufolin.DBUtility;
using Kufolin.Foundation.Model;
using Kufolin.Foundation.IDAL;

namespace Kufolin.Foundation.DAL
{
/// <summary>
/// 类 编 号: 12
/// 类 名 称: IndctDAL
/// 内容摘要: 对实体类Indct的数据库操作
/// 完成日期: 2007-12-17 13:32:43
/// 编码作者: 田长军
/// </summary>
public class IndctDAL : IIndctDAL
{
private static ISession session = null;
/// <summary>
/// 默认构造函数
/// </summary>
public IndctDAL()
{
session = NHibernateHelper.GetCurrentSession();
}
/// <summary>
/// 生产填充TreeView的DataSet对象
/// </summary>
public DataSet CreateDataSet()
{
DataSet _dataSet = new DataSet();
SqlDataAdapter _adapter = new SqlDataAdapter();
SqlConnection _connection = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction);

_adapter.SelectCommand = new System.Data.SqlClient.SqlCommand();
_adapter.SelectCommand.Connection = _connection;
_adapter.SelectCommand.CommandText = "SELECT * FROM Indct";
_adapter.SelectCommand.CommandType = System.Data.CommandType.Text;

_connection.Open();
_adapter.Fill(_dataSet);
_connection.Close();

return _dataSet;
}
/// <summary>
/// 根据sql生成的DataSet对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns>DataSet对象</returns>
public DataSet CreateDataSet(String sql)
{
DataSet _dataSet = new DataSet();
SqlDataAdapter _adapter = new SqlDataAdapter();
SqlConnection _connection = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction);

_adapter.SelectCommand = new System.Data.SqlClient.SqlCommand();
_adapter.SelectCommand.Connection = _connection;
_adapter.SelectCommand.CommandText = sql;
_adapter.SelectCommand.CommandType = System.Data.CommandType.Text;

_connection.Open();
_adapter.Fill(_dataSet);
_connection.Close();

return _dataSet;
}
/// <summary>
/// 根据指标类别代码获得Indct对象
/// </summary>
/// <param name="indctID">指标代码</param>
/// <returns>指标类别对象</returns>
public Indct GetIndct(String indctID)
{
Indct indct = null;
ITransaction trans = session.BeginTransaction();
try
{
indct = (Indct)session.Load(typeof(Indct), indctID);
trans.Commit();
}
catch (ADOException re)
{
indct = null;
}
return indct;
}
/// <summary>
/// 根据指标类别编码获取该指标类别下的所有指标
/// </summary>
/// <param name="indctClassCode">指标类别编码</param>
/// <returns>指标类别下的所有指标</returns>
public IList<Indct> GetListIndct(String indctClassCode)
{
IList<Indct> indcts = new List<Indct>();
ITransaction trans = session.BeginTransaction();
try
{
IQuery query = session.CreateQuery("FROM Indct WHERE Indct_Class_Code LIKE :ClassCode");
query.SetString("ClassCode", indctClassCode);

indcts = query.List<Indct>();
trans.Commit();
}
catch (ADOException re)
{
if (trans != null) trans.Rollback();
indcts = null;

System.Windows.Forms.MessageBox.Show(re.Message);
System.Windows.Forms.MessageBox.Show(re.StackTrace);
}
return indcts;
}
/// <summary>
/// 增加一个指标对象
/// </summary>
/// <param name="newIndct">需增加的指标对象</param>
public void InsertIndct(Indct newIndct)
{
ITransaction trans = session.BeginTransaction();
try
{
if (newIndct.Indct_Class_Code == null)
//throw new Exception();
if (newIndct.Indct_Code == null)
//throw new Exception();
if (newIndct.Indct_Name == null)
//throw new Exception();
if (newIndct.Indct_DataType < 0)
//throw new Exception();
if (newIndct.Indct_Accuracy < 0)
//throw new Exception();
if (newIndct.Indct_Method < 0)
//throw new Exception();
if (newIndct.Indct_Frequency < 0)
//throw new Exception();
if (newIndct.Indct_Type < 0)
//throw new Exception();
if (newIndct.Indct_Deployed == true)
//throw new Exception();
if (newIndct.Indct_IsRecount == true)
//throw new Exception();

session.Save(newIndct);
trans.Commit();
}
catch (ADOException e)
{
if (trans != null) trans.Rollback();
throw;
}

}
/// <summary>
/// 根据指标类别代码删除指标类别对象
/// </summary>
/// <param name="indctID">指标代码</param>
public void DeleteInduct(String indctID)
{
ITransaction trans = session.BeginTransaction();
try
{
Indct indct = session.Get(typeof(Indct), indctID) as Indct;

session.Delete(indct);
trans.Commit();
}
catch
{
if (trans != null) trans.Rollback();
throw;
}
}
/// <summary>
/// 编辑指标对象
/// </summary>
/// <param name="indctID">需编辑的指标对象代码</param>
/// <param name="newIndct">需编辑的指标对象</param>
public void UpdateInduct(String indctID, Indct newIndct)
{
ITransaction trans = session.BeginTransaction();

Indct oldIndct = session.Get(typeof(Indct), indctID) as Indct;
try
{
if (newIndct.Indct_Class_Code != null)
oldIndct.Indct_Class_Code = newIndct.Indct_Class_Code;
if (newIndct.Indct_Code != null)
oldIndct.Indct_Code = newIndct.Indct_Code;
if (newIndct.Indct_Name != null)
oldIndct.Indct_Name = newIndct.Indct_Name;
if (newIndct.Indct_DataType != 0)
oldIndct.Indct_DataType = newIndct.Indct_DataType;
if (newIndct.Indct_InTable != null)
oldIndct.Indct_InTable = newIndct.Indct_InTable;
if (newIndct.Indct_InColumn != null)
oldIndct.Indct_InColumn = newIndct.Indct_InColumn;
if (newIndct.Indct_Desp != null)
oldIndct.Indct_Desp = newIndct.Indct_Desp;
if (newIndct.Indct_Source != 0)
oldIndct.Indct_Source = newIndct.Indct_Source;
if (newIndct.Indct_Unit != 0)
oldIndct.Indct_Unit = newIndct.Indct_Unit;
if (newIndct.Indct_ValueScope != 0)
oldIndct.Indct_ValueScope = newIndct.Indct_ValueScope;
if (newIndct.Indct_Accuracy != 0)
oldIndct.Indct_Accuracy = newIndct.Indct_Accuracy;
if (newIndct.Indct_Method != 0)
oldIndct.Indct_Method = newIndct.Indct_Method;
if (newIndct.Indct_Frequency != 0)
oldIndct.Indct_Frequency = newIndct.Indct_Frequency;
if (newIndct.Indct_Type != 0)
oldIndct.Indct_Type = newIndct.Indct_Type;
if (newIndct.Indct_Deployed != true)
oldIndct.Indct_Deployed = newIndct.Indct_Deployed;
if (newIndct.Indct_IsRecount != true)
oldIndct.Indct_IsRecount = newIndct.Indct_IsRecount;
if (newIndct.Indct_Order != 0)
oldIndct.Indct_Order = newIndct.Indct_Order;

session.Update(oldIndct);
trans.Commit();
}
catch (ADOException e)
{
if (trans != null) trans.Rollback();
throw;
}
}
}
}
DataAccessLayer数据访问层的工厂类:
using System.Reflection;
using System.Configuration;
using Kufolin.Foundation.IDAL;

namespace Kufolin.Foundation.DALFactory
{
/// <summary>
/// 类 编 号: 01
/// 类 名 称: DataAccess
/// 内容摘要: 数据访问层中的抽象工厂,通过反射机制生成各种IDAL对象
/// 完成日期: 2007-12-9 17:37:38
/// 编码作者: 田长军
/// </summary>
public sealed class DataAccess
{
private DataAccess() { }
/// <summary>
/// 生成IIndctDAL对象
/// </summary>
/// <returns>IIndctDAL对象</returns>
public static IIndctDAL CreateIndctDAL()
{
return (IIndctDAL)Kufolin.DBUtility.ServiceLocator.LocateDALObject("IndctDAL");
}
}
}























NHibernateHelper类的相关应用:













































































































































































































































DataAccessLayer数据访问层的工厂类:


























