学习使用NHibernate2.1.0Beta1(四)— 创建数据访问项目DAL
1、所谓DAL就是Data Acess Layer每个单词第一个字母的组合。
2、首先,创建一个类库项目DAL,并将属性中的程序集名称更改为DALayer(名称看自己)。
3、添加引用:
1)添加对AppModel程序集(在上一篇中创建的类库)的引用
2)将下载的NHibernate压缩包解压,把bin/net-2.0/下的所有dll文件都添加进来
4、创建名为DalNewsCatalog.cs的类文件,这个类实现了增、删、改、查功能,有关更复杂的查询请读者尝试或查阅其它资料,代码如下:
1
using System.Collections.Generic;2
using Model;3
//不熟悉NHibernate对象的话,有必要先using以下命名空间4
using NHibernate;5
using NHibernate.Cfg;6
using NHibernate.Criterion;7

8
namespace DAL9


{10
public class DalNewsCatalog11

{12
ISession _session;13
ISessionFactory factory = 14
new Configuration().Configure().BuildSessionFactory();15
public DalNewsCatalog()16

{17
_session = factory.OpenSession();18
}19

/**//// <summary>20
/// 获取NewsCatalog表中的所有数据行21
/// </summary>22
/// <returns></returns>23
public IList<NewsCatalog> GetAllNewsCatalog()24

{25
return _session.CreateQuery("FROM NewsCatalog")26
.List<NewsCatalog>();27
}28

/**//// <summary>29
/// 根据CatalogID获取一行数据30
/// </summary>31
/// <param name="id">CatalogID的值</param>32
/// <returns></returns>33
public IList<NewsCatalog> GetNewsCatalogById(int id)34

{35
return _session.CreateQuery("SELECT FROM NewsCatalog WHERE CatalogID=:ID")36
.SetInt32("ID",id).List<NewsCatalog>();37
}38

/**//// <summary>39
/// 根据CatalogID获取一行数据40
/// </summary>41
/// <param name="id">CatalogID的值</param>42
/// <returns></returns>43
public NewsCatalog GetSingleNewsCatalogById(int id)44

{45
IList<NewsCatalog> list = _session.CreateQuery("SELECT FROM NewsCatalog WHERE CatalogID=:ID")46
.SetInt32("ID", id).List<NewsCatalog>();47
if (list != null && list.Count > 0)48

{49
return (NewsCatalog)list[0];50
}51
else52

{53
return null;54
}55
}56

/**//// <summary>57
/// 获取前N行数据58
/// </summary>59
/// <param name="topNum">要获取的数据行的数目</param>60
/// <returns></returns>61
public IList<NewsCatalog> GetNewsCatalogByTopN(int topNum)62

{63
return _session.CreateQuery("FROM NewsCatalog").64
SetMaxResults(topNum).List<NewsCatalog>();65
}66

/**//// <summary>67
/// 加模糊查询和排序68
/// </summary>69
/// <param name="name"></param>70
/// <returns></returns>71
public IList<NewsCatalog> GetNewsCatalogByName(string name)72

{73
ICriteria cri = _session.CreateCriteria(typeof(NewsCatalog));74
cri.Add(Restrictions.Like("CatalogName","%"+name+"%"));75
cri.AddOrder(new NHibernate.Criterion.Order("CatalogID",false));76
return cri.List<NewsCatalog>();77
}78

/**//// <summary>79
/// 执行T-Sql80
/// </summary>81
/// <returns></returns>82
public IList<NewsCatalog> GetNewsCatalogBySql()83

{84

85
return _session.CreateSQLQuery(86
"SELECT * FROM NewsCatalog",87
"Catalogs",88
typeof(NewsCatalog))89
.List<NewsCatalog>();90
}91

92

/**//// <summary>93
/// 删除一行数据94
/// </summary>95
/// <param name="sample">NewsCatalog类的实例</param>96
/// <returns></returns>97
public bool Delete(NewsCatalog sample)98

{99
try100

{101
_session.Delete(sample);102
//注意在修改和删除时需要加下面一行代码103
_session.Flush();104
return true;105
}106
catch107

{108
return false;109
}110
}111

/**//// <summary>112
/// 插入一行数据113
/// </summary>114
/// <param name="sample">NewsCatalog类的实例</param>115
/// <returns></returns>116
public bool Save(NewsCatalog sample)117

{118
try119

{120
_session.Save(sample);121
return true;122
}123
catch124

{125
return false;126
}127
}128

/**//// <summary>129
/// 更新一行数据130
/// </summary>131
/// <param name="sample">NewsCatalog类的实例</param>132
/// <returns></returns>133
public bool Update(NewsCatalog sample)134

{135
try136

{137
_session.Update(sample);138
_session.Flush();139
return true;140
}141
catch142

{143
return false;144
}145
}146

147
~DalNewsCatalog()148

{149
//_session.Disconnect();150
//_session.Dispose();151
}152
}153
}154

接下来,保存文件,编译项目即可。
下一篇,将通过一个Web站点来介绍使用DAL(这个汗了,其实大家都会)。
浙公网安备 33010602011771号