读书人

数据访问层的第三种兑现:基于NBear框

发布时间: 2012-10-14 14:55:07 作者: rapoo

数据访问层的第三种实现:基于NBear框架的ORM实现

数据访问层的第三种实现:基于NBear框架的ORM实现
</configSections>
<entityConfig>
??? <includes>
??????? <add key="Sample Entity Config" value="~/NBearConfig.xml"/>
??? </includes>
</entityConfig>
然后再在<connectionStrings>节点下增加如下项:
<add name="NBearConnectionString" connectionString="Server=LOCALHOST\SQLEXPRESS;Database=NGuestBook;Uid=WebUser;Pwd=123456" providerName="NBear.Data.SqlServer.SqlDbProvider"/>
其中connectionString是连接字符串,根据个人不同情况进行修改。这里使用的是SQLServer2005。
因为数据库在上一篇中已经创建好了,这里就不需要创建数据库了。

3.编写转换器
这里出现了一个矛盾:业务逻辑层和表示层需要使用通用的实体类,如AdminInfo,而NBear需要使用专用实体类。怎么解决这个矛盾呢?我这里使用的方法是一个我称之为“转换器”的方法。?即为没一个实体写一个专门的转换器,实现两种实体类的转换。这里以管理员实体为例,这个转换器写在NBearDAL工程下的AdminConvertor.cs文件中。具体代码如下:

AdminConvertor.cs:

??1using?System;
??2using?System.Collections.Generic;
??3using?System.Text;
??4using?System.Data.Common;
??5using?NGuestBook.IDAL;
??6using?NGuestBook.Entity;
??7using?NBear.Common;
??8using?NBear.Data;
??9
?10namespace?NGuestBook.NBearDAL
?11{
?12????public?class?AdminDAL?:?IAdminDAL
?13????{
?14????????///?<summary>
?15????????///?插入管理员
?16????????///?</summary>
?17????????///?<param?name="admin">管理员实体类</param>
?18????????///?<returns>是否成功</returns>
?19????????public?bool?Insert(AdminInfo?admin)
?20????????{
?21????????????Gateway.SetDefaultDatabase("NBearConnectionString");
?22????????????DbTransaction?transcation?=?Gateway.Default.BeginTransaction();
?23????????????try
?24????????????{
?25????????????????Gateway.Default.Save<TAdmin>(AdminConvertor.CommonEntityToNBearEntity(admin));
?26????????????????transcation.Commit();
?27????????????????return?true;
?28????????????}
?29????????????catch
?30????????????{
?31????????????????transcation.Rollback();
?32????????????????return?false;
?33????????????}
?34????????????finally
?35????????????{
?36????????????????Gateway.Default.CloseTransaction(transcation);
?37????????????}
?38????????}
?39
?40????????///?<summary>
?41????????///?删除管理员
?42????????///?</summary>
?43????????///?<param?name="id">欲删除的管理员的ID</param>
?44????????///?<returns>是否成功</returns>
?45????????public?bool?Delete(int?id)
?46????????{
?47????????????Gateway.SetDefaultDatabase("NBearConnectionString");
?48????????????DbTransaction?transcation?=?Gateway.Default.BeginTransaction();
?49????????????try
?50????????????{
?51????????????????Gateway.Default.Delete<TAdmin>(id);
?52????????????????transcation.Commit();
?53????????????????return?true;
?54????????????}
?55????????????catch
?56????????????{
?57????????????????transcation.Rollback();
?58????????????????return?false;
?59????????????}
?60????????????finally
?61????????????{
?62????????????????Gateway.Default.CloseTransaction(transcation);
?63????????????}
?64????????}
?65
?66????????///?<summary>
?67????????///?更新管理员信息
?68????????///?</summary>
?69????????///?<param?name="admin">管理员实体类</param>
?70????????///?<returns>是否成功</returns>
?71????????public?bool?Update(AdminInfo?admin)
?72????????{
?73????????????Gateway.SetDefaultDatabase("NBearConnectionString");
?74????????????DbTransaction?transcation?=?Gateway.Default.BeginTransaction();
?75????????????PropertyItem[]?properties?=?{
?76????????????????new?PropertyItem("Name"),
?77????????????????new?PropertyItem("Password")
?78????????????};
?79????????????object[]?values?={
?80????????????????admin.Name,
?81????????????????admin.Password
?82????????????};
?83????????????try
?84????????????{
?85????????????????Gateway.Default.Update<TAdmin>(properties,?values,?null,?transcation);
?86????????????????transcation.Commit();
?87????????????????return?true;
?88????????????}
?89????????????catch
?90????????????{
?91????????????????transcation.Rollback();
?92????????????????return?false;
?93????????????}
?94????????????finally
?95????????????{
?96????????????????Gateway.Default.CloseTransaction(transcation);
?97????????????}
?98????????}
?99
100????????///?<summary>
101????????///?按ID取得管理员信息
102????????///?</summary>
103????????///?<param?name="id">管理员ID</param>
104????????///?<returns>管理员实体类</returns>
105????????public?AdminInfo?GetByID(int?id)
106????????{
107????????????Gateway.SetDefaultDatabase("NBearConnectionString");
108????????????TAdmin?tAdmin?=?Gateway.Default.Find<TAdmin>(TAdmin._.ID?==?id);
109????????????return?tAdmin?==?null???null?:?AdminConvertor.NBearEntityToCommonEntity(tAdmin);
110????????}
111
112????????///?<summary>
113????????///?按用户名及密码取得管理员信息
114????????///?</summary>
115????????///?<param?name="name">用户名</param>
116????????///?<param?name="password">密码</param>
117????????///?<returns>管理员实体类,不存在时返回null</returns>
118????????public?AdminInfo?GetByNameAndPassword(string?name,?string?password)
119????????{
120????????????Gateway.SetDefaultDatabase("NBearConnectionString");
121????????????TAdmin?tAdmin?=?Gateway.Default.Find<TAdmin>(TAdmin._.Name?==?name?&&?TAdmin._.Password?==?password);
122????????????return?tAdmin?==?null???null?:?AdminConvertor.NBearEntityToCommonEntity(tAdmin);
123????????}
124
125????????///?<summary>
126????????///?按管理员名取得管理员信息
127????????///?</summary>
128????????///?<param?name="name">管理员名</param>
129????????///?<returns>管理员实体类</returns>
130????????public?AdminInfo?GetByName(string?name)
131????????{
132????????????Gateway.SetDefaultDatabase("NBearConnectionString");
133????????????TAdmin?tAdmin?=?Gateway.Default.Find<TAdmin>(TAdmin._.Name?==?name);
134????????????return?tAdmin?==?null???null?:?AdminConvertor.NBearEntityToCommonEntity(tAdmin);
135????????}
136
137????????///?<summary>
138????????///?取得全部管理员信息
139????????///?</summary>
140????????///?<returns>管理员实体类集合</returns>
141????????public?IList<AdminInfo>?GetAll()
142????????{
143????????????IList<AdminInfo>?adminCollection?=?new?List<AdminInfo>();
144????????????Gateway.SetDefaultDatabase("NBearConnectionString");
145????????????TAdmin[]?tAdminCollection?=?Gateway.Default.FindArray<TAdmin>(null,?TAdmin._.ID.Desc);
146????????????foreach?(TAdmin?tAdmin?in?tAdminCollection)
147????????????{
148????????????????adminCollection.Add(AdminConvertor.NBearEntityToCommonEntity(tAdmin));
149????????????}
150????????????return?adminCollection;
151????????}
152????}
153}

读书人网 >编程

热点推荐