一个NHibernate的小应用----完善前面所写的文章
前言:已经好久没有写了,只发表了一个文章,后面生病了,住院了很久,就休息了很长时间。现在把前面的那个文章完善。让读者们能看到一个基本的操作。今天文章包括基本的增删改查,一对一的使用,一对多的使用。多对一的使用。下次文章写一级二级缓存。
一:数据库文件:包括四个表,一个学生表,一个班级表,一个课程表,一个学生课程的中间表如图:
其中学生表字段有(SId:主键;SNam:姓名;SCId(对应班级表的主键):班级Id),班级表(CId:主键;CName:班级名称),课程表(SubID:主键;SubNme)中间表(RId:主键;SId:对应学生主键;SubId:课程表主键)注:其中的主键都是自动增长的(自动增长+1)
二:项目开始,打开VS2010,新建一个ASP.NET应用程序取名字NHApp
如图:
一个ASP的应用程序启动了。然后引用所需的DLL加载到程序中,这些基本的第一篇文章已经说过了,不知道可以去看看,比较简单。如图:
添加引用就不用说了的。每个dll的作用在第一篇文章有说的。
然后配置文件了,打开web.config文件,如图:
关于配置文件的作用第一篇文章说的非常详细了,大家可以去看看的。
好了基本都搞定了。现在我们就基本的小试一下了,添加一个webform页面叫ClassesList.aspx页面。添加一个页面就要该类的序列化类了。我们添加叫Claseees类,拼言错了,我的VS写成这养了。代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace NHApp 7 { 8 public class Claseees 9 { 10 private int _cid; 11 //private IList<Student> _list; 12 ////一个班级可以拥有好多学生的,所以这里使用IList<Student>来装载好多好多的学生,多余配置文件就是使用一对多来标签来说明,我们去看配置文件吧。 13 //public virtual IList<Student> List 14 //{ 15 // get { return _list; } 16 // set { _list = value; } 17 //}//现在用不动啊,大家不用看的。 18 public virtual int CId 19 { 20 get { return _cid; } 21 set { _cid = value; } 22 } 23 private string _cname; 24 25 public virtual string CName 26 { 27 get { return _cname; } 28 set { _cname = value; } 29 } 30 } 31 }
然后添加一个名字为Claseees.hbm.xml的xml文件。如图:
上面的bag标签被我删除了。等下要用到,那个解释忘记删除掉了。
然后就可以使用了,打开ClassesList.aspx页面,添加一个Repeater控件:写入后台代码:如下:
Repeater控件的使用大家应该都会的吧。代码看懂应该不是问题的。附上后台代码:如下:
这里就能把所有的班级给显示出阿里了,页面运行效果如下:
好了。这是最基本的显示了。我们下来新建一个StudentList.aspx页面用来查看所有的学生。也要添加一个Student类,一个xml文件。如图:
Student:
Student.hbm.xml文件:
StudentList.aspx的前台文件:
StudentList.aspx文件的后台文件:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using NHibernate; 8 using NHibernate.Cfg; 9 namespace NHApp 10 { 11 public partial class StudentList : System.Web.UI.Page 12 { 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 using (ISessionFactory factory = new Configuration().Configure().BuildSessionFactory()) 16 { 17 //开始一个Session 18 using (ISession sess = factory.OpenSession()) 19 { 20 //开始一个事物 21 using (ITransaction tran = sess.BeginTransaction()) 22 { 23 IQuery query = sess.CreateQuery("from Student as s "); 24 IList<Student> list = query.List<Student>(); 25 Repeater1.DataSource = list; 26 Repeater1.DataBind(); 27 } 28 } 29 } 30 } 31 //这个等下才能用到 32 protected void Button1_Click(object sender, EventArgs e) 33 { 34 Response.Redirect("StudentManger/StudentAdd.aspx"); 35 } 36 } 37 }
好了,展示数据搞定了,用到了多对一的节点。我们现在来看看一对多的情况,也就是一个班级有好多学生,在前面的ClassesList.aspx页面上加了查看的按钮,我们的使用是你点击进去,显示该班级信息,把所有的学生都有显示出来!!!!!!!!!我们添加两个文件夹如图:
其中ClassManger用来班级表的增删改查,那个文件夹是学生表的增删改查
我们在ClassManger文件夹加入一个名为ClassesSingle.aspx的页面用来显示上面所说的用途:
前台页面一个Repeater控件.如图:
后台代码:
在这里添加之前把前面那个Classes类中 //private IList<Student> _list;
//一个班级可以拥有好多学生的,所以这里使用IList<Student>来装载好多好多的学生,多余配置文件就是使用一对多来标签来说明,我们去看配置文件吧。
// public virtual IList<Student> List
// {
// get { return _list; }
// set { _list = value; }
// }//现在用不动啊,大家不用看的。
这段被我解释掉了的代码给去注释。
完整的Claseees.cs的代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace NHApp 7 { 8 public class Claseees 9 { 10 private int _cid; 11 private IList<Student> _list; 12 //一个班级可以拥有好多学生的,所以这里使用IList<Student>来装载好多好多的学生,多余配置文件就是使用一对多来标签来说明,我们去看配置文件吧。 13 public virtual IList<Student> List 14 { 15 get { return _list; } 16 set { _list = value; } 17 }//现在用不动啊,大家不用看的。 18 public virtual int CId 19 { 20 get { return _cid; } 21 set { _cid = value; } 22 } 23 private string _cname; 24 25 public virtual string CName 26 { 27 get { return _cname; } 28 set { _cname = value; } 29 } 30 } 31 }
ClassesSingle.aspx的后台文件代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using NHibernate; 8 using NHibernate.Cfg; 9 namespace NHApp.ClassesManger 10 { 11 public partial class ClassesSingle : System.Web.UI.Page 12 { 13 protected Claseees model; 14 protected void Page_Load(object sender, EventArgs e) 15 { 16 if (!IsPostBack) 17 { 18 string cid = Request.QueryString["CId"].ToString(); 19 if (!string.IsNullOrEmpty(cid)) 20 { 21 //开启一个工厂 22 using (ISessionFactory factory = new Configuration().Configure().BuildSessionFactory()) 23 { 24 //开始一个Session 25 using (ISession sess = factory.OpenSession()) 26 { 27 //开始一个事物 28 using (ITransaction tran = sess.BeginTransaction()) 29 { 30 //这里使用的是HQL语言,今天忘记说了。下次说缓存的时候说一下的。 31 IQuery query = sess.CreateQuery("from Claseees as c where c.CId=:d"); 32 query.SetInt32("d", int.Parse(cid)); 33 model = query.UniqueResult<Claseees>();//查询单个对象 34 IList<Student> list = model.List; 35 Repeater1.DataSource = list; 36 Repeater1.DataBind(); 37 //foreach (var v in list) 38 //{ 39 // Response.Write(v .SName); 40 //} 41 } 42 } 43 } 44 } 45 } 46 } 47 } 48 }
好了大概的基本就这么多的了,等下把源代码发上来包括数据库文件。StudentManger文件下就是增加删除,更新什么的。那个大家下载源代码可以自己去看看的。
http://dl.vmall.com/c00u40d6fr
感谢大家的观看。
By 龟龟爱我你
DateTime:2012年10月12日 20:28
End。。。。。。。。。。