一个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写成这养了。代码:

View Code
 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文件的后台文件:

View Code
 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的代码如下:

View Code
 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的后台文件代码:

View Code
 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。。。。。。。。。。

 

 

 

 

 

 

 

  

 

 

 

 

posted @ 2012-10-12 20:31  最爱蜗牛  阅读(763)  评论(1编辑  收藏  举报